CPUの高負荷について
竹田と申します。
夏休みをとっていたため
レスポンスが遅くなりました申し訳ありません。
※少し検証した所、ブロッキングモードで起動することでCPU高負荷が解消されているように見受けられました。
当該バージョン(および最新版でも)UML7ではオプション等で
ブロッキング/ノンブロッキングモードを切り替えることはできません。
#当該バージョンのUML7はハードコーディングでノンブロッキングモードに設定されています。
質問者様が仰っている「ブロッキングモードで起動する」という事に関して、
どのような設定を実施したかお教えいただけると幸いです。
なお、後にも述べますが
UML7ではブロッキング/ノンブロッキングモードの違いにより
制御を変えているということはないため、
ブロッキングモードでの起動によりCPU高負荷が解消されるという
点について理由を特定することは困難に思われます。
参考までに、UML7でSSL終端時にバックエンドサーバでHTTP KeepAliveを設定していると
まれにCPUが高負荷になるということが過去に発生しました。
v3.1.2ではこれに起因する問題が改善されています。
https://osdn.jp/ticket/browse.php?tid=34416&group_id=1951
・ブロッキングモードはパフォーマンスとして、20%程度落ちるとの記事を見ましたが、認識としては間違っていませんでしょうか。
・パフォーマンスが落ちるのであれば、動作も異なると考えておりますが、具体的な動作として何が違うのでしょうか。
・ブロッキングモードでは、例えばCPUは50%までしか使用しないなどの制御はありますでしょうか。
・ブロッキングモードの起動でCPUの使用制限などのオプションなどは御座いますでしょうか。
・その他、ブロッキングモードとノンブロッキングモードの違いについてはあればご教示頂けますでしょうか。
先述の通り、UML7でブロッキングモードに切り替える手段はなく、
内部の処理的にもこれらのモードの違いによりUML7の制御を変えているということはありません。
従いまして、ブロッキング/ノンブロッキングに関して
どの程度UML7のパフォーマンスが落ちる等の見解を述べることができません。
#ただ、質問者様が検証で使用された設定をお教えいただければ、
#こちらで調査しパフォーマンスの比較等を行うことはできるかもしれません。
お力になれず申し訳ありませんが、以上です。
竹田様
ご回答頂き、ありがとうございます。
ブロッキング/ノンブロッキングモードを切り替えることはできない。とのこと承知しました。
起動オプションで「-b」を付けることで、ブロッキングモードでの起動になると思っておりました。
ご教示頂いた、以下のバージョンアップの件ですが、バージョンアップをすることが難しく チューニングなどで解消できるのであれば、そちらをしたいと考えております。
https://osdn.jp/ticket/browse.php?tid=34416&group_id=1951
現在、チューニングでCPUの制御ができないのかを検討しております。 「num_of_core_uses 」を設定することで、コア数の制限がかかるのでは ないかと考えておりますが、
例えば「1」と設定することで使用するコア数が「1」となりますでしょうか。
また、他にCPUの制御が出来るパラメータがあれば、ご教授頂けませんでしょうか。
お願い致します。
竹田です。
たびたび遅くなってすいません。
諸事情により8月末よりPCが使えない環境におりました…
None への返信
竹田様 ご回答頂き、ありがとうございます。 ブロッキング/ノンブロッキングモードを切り替えることはできない。とのこと承知しました。 起動オプションで「-b」を付けることで、ブロッキングモードでの起動になると思っておりました。
過去のバージョンでは存在していたようですが、
現在ではそのオプションはSorryサーバの設定に用いられています。
https://osdn.jp/projects/ultramonkey-l7/docs/uml7-administration_manual_v3.3_ja/ja/6/uml7-administration_manual_v3.3_ja.txt
ご教示頂いた、以下のバージョンアップの件ですが、バージョンアップをすることが難しく チューニングなどで解消できるのであれば、そちらをしたいと考えております。 https://osdn.jp/ticket/browse.php?tid=34416&group_id=1951 現在、チューニングでCPUの制御ができないのかを検討しております。 「num_of_core_uses 」を設定することで、コア数の制限がかかるのでは ないかと考えておりますが、 例えば「1」と設定することで使用するコア数が「1」となりますでしょうか。
想定されている通り、「num_of_core_uses」パラメータによりCPUコア数の制限をかけることが可能です。
#内部的には sched_setaffinity システムコールを使用していますので、
#詳細を知りたい場合は当該manページなどを参照ください。
ただ、これはl7vsd(もっと細かく言うとVirtualServiceが管理しているセッション)による
CPUリソースの占有を避けるための対処なので、l7vsd自体が高負荷になっていることに変わりはありません。
もし、質問者様の環境で発生している問題が #34416 の原因と同様だと考えられるならば、
バックエンドサーバのHTTP KeepAliveをoffにする/タイムアウトまでの時間を短くする
などの対処をしたほうがl7vsdに負荷がかかる時間を下げることができると思います。
また、他にCPUの制御が出来るパラメータがあれば、ご教授頂けませんでしょうか。 お願い致します。
UML7においては「num_of_core_uses」以外で
質問者様が所望されるような制御を行うパラメータはありません。
参考までに、EPELのCPULimitというツールで
プロセスごとのCPU使用率を制限できるようです。
根本的な対処を提示できず申し訳ありませんが、以上になります。
最新バージョンで修正されている事象であるためクローズといたします。 Q&AについてはチケットでなくMLに投稿頂くようお願いいたします。
現在、Red Hat Enterprise Linux 6.5 上で UltraMonkey-L7 v3.1.1 を動作させています。
常にではありませんが、稀にCPUが高負荷となることがあります。
検証した所、おそらくHTTPSでのアクセスの時にCPUが高負荷となっているように見受けられます。
UltraMonkey-L7 v3.1.2-1 にバージョンアップすることで解消されるとも考えておりますが、
こちらの都合でバージョンアップすることが難しく、出来ればバージョンアップはしたくないと考えております。
そこで、起動モードをブロッキングモードで起動させて解消できないのかと考えております。
※少し検証した所、ブロッキングモードで起動することでCPU高負荷が解消されているように見受けられました。
ノンブロッキングモードではパフォーマンス優先となり、ブロッキングモードではCPUの制御が優先となる記事を見かけました。
ブロッキングモードとノンブロッキングモードの違いについて、以下の5点についてご回答頂けますでしょうか。
・ブロッキングモードはパフォーマンスとして、20%程度落ちるとの記事を見ましたが、認識としては間違っていませんでしょうか。
・パフォーマンスが落ちるのであれば、動作も異なると考えておりますが、具体的な動作として何が違うのでしょうか。
・ブロッキングモードでは、例えばCPUは50%までしか使用しないなどの制御はありますでしょうか。
・ブロッキングモードの起動でCPUの使用制限などのオプションなどは御座いますでしょうか。
・その他、ブロッキングモードとノンブロッキングモードの違いについてはあればご教示頂けますでしょうか。
お願い致します。