CPU使用率の過剰への対応 |
アプリケーションプロセスのCPU使用率が100%近くになった、または以前に比べてアプリケーションプロセスのCPU使用率が著しく大きくなったことを、ここではCPU使用率の過剰として扱いますが、システム構築段階で試行させてみたら考えられない程CPUを消費していた、という場合も本記述を参考にしてください。CPU使用率の過剰としては主に以下のケースが考えられます。
タスクマネージャ(Windows)またはtopコマンド(UNIX)を使用し、アプリケーションプロセスのCPU使用率が大きくなっていないか確認して下さい。以下の名前のプロセスを調べてください。
(Windows)
THTPPCTL.exe
THTPPCTL_N.exe
THTPPCTL_N2003.exe
THTPPCTL_2005.exe
(UNIX)
THTPPCTL7
THTPPCTL8
THTPPCTL9
THTPPJAVA2
THTPPOTS7
THTPPOTS8
THTPPOTS9
THTPPDB7
THTPPDB8
THTPPDB9
実行時間上限の設定
CPUループの回避策として該当オペレーションに実行時間上限の設定を行なうことによりCPUループ事象を回避することができます。実行時間上限で設定した時間経過しても応答がない場合はTPモニタにより強制終了させられます。オペレーションの以下の設定を見直してください。
「オペレーションの自動活性」の「実行時間上限」
設定の際は運用アシスタントの実行時間上限適正値算出機能を利用することができます。詳しくは「TPモニタの運用操作 2.40.4 実行時間上限の適正値算出」を参照してください。
CPUを多く消費した影響により、個々の処理が遅延した場合、運用アシスタントのスローダウン障害検出機能により検出されます。スローダウンが検出されると以下のメッセージがイベントログ・シスログに通知されます。
“OTX20110100 オペレーションzzzのスローダウンを検出しました。current:平均実行時間=xxx秒。normal:平均実行時間=www秒。プロセスグループ=vvv。 ObjectName=yyy”
|
イベントログ(アプリケーション、システム)・シスログ
ジャーナル(採取方法は「TPモニタの運用操作 2.39 障害解析」)
APログ:
${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>.<数字>.<PID>.log
システムトレース:
${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>_sys.<数字>.<PID>.log
イベントジャーナル(採取方法は「TPモニタの運用操作 2.39 障害解析」)
quewrt, DI X TR(採取方法は「TPモニタの運用操作 2.39 障害解析」)
運用管理コマンドを使用すると、CPU使用率の高いプロセスグループを特定できます。以下のコマンドにより、全プロセスグループのCPU使用率を取得できます。このCPU使用率には、プロセスグループに含まれるプロセスのCPU使用率の合計が表示されます。
統合運用管理ツールからも、プロセスグループごとのCPU使用率を確認することができます。
CPUループが発生している場合は、統合運用管理ツールから、プロセスグループの「動作情報」タブにある「スレッド情報」の[CPU使用率]を連続して参照(F6)し、CPU使用率の高いスレッドを確認してください。特定のスレッドでCPU使用率が高い場合は、そのスレッドで実行中のオペレーション処理内で、CPUループが発生している可能性があります。特に、[経過時間]が[情報採取間隔]より長く、CPU使用率が100%近くある場合は、該当の処理でCPUを消費していることがわかります。
ユーザモードCPU使用時間が増加しているのであれば、サーバAPの処理に問題がある可能性があります。カーネルモードCPU使用時間が多い場合は、リソース使用の効率化等を検討してください。
該当APがJavaの場合、CPUループ発生中に、統合運用管理ツールより該当プロセスグループを選択して、右クリックで「スタックトレースの採取(stackTrace)」を実行してください。、数回にわたり、定期的にスタックトレースを採取してください。これにより行レベルでCPUループ発生箇所を調査できます。
サーバAPからの応答がある場合は、オペレーションジャーナルを採取し、オペレーションごとのCPU使用時間を調査することにより、CPUを多く消費しているオペレーションを特定できます。
該当プロセスグループを再起動することで一時的に復旧する可能性もありますが、アプリケーションの処理を見直す必要があります。なおCPUループしている場合は、「通常停止(stop)」は失敗してしまう可能性があります。その場合は「強制停止(forcibleStop)」させてください。
問題のあるオペレーションを一時的に閉塞することにより、状況の悪化を和らげることができる可能性もあります。
この問題を予防するための対策については以下の方法があります。
問題のAPの修正
完全に問題を解決するためにはAPを修正する必要があります。スレッド情報を定期的に参照して、CPUを消費しているスレッドで実行中のオペレーションがCPUループしている可能性があると考えられます。
なお該当APがJavaである場合、該当アプリケーショングループを強制停止することで、CPUループによりストール箇所の特定を行なうことができます。
原因不明などでAPの修正が困難な場合は回避策として該当オペレーションに実行時間上限の設定を行なうことによりCPUループ事象を回避することができます。実行時間上限で設定した時間経過しても応答がない場合はTPモニタにより強制終了させられます。オペレーションの以下の設定を見直してください。
「オペレーションの自動活性」の「実行時間上限」
設定の際は運用アシスタントの実行時間上限適正値算出機能を利用することができます。詳しくは「TPモニタの運用操作 2.40.4 実行時間上限の適正値算出」を参照してください。