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”
      “OTX20110100 The Operation zzz get late. Average of current time is xxx s. Average of normal time is www s. The Process Group is vvv. The ObjectName is yyy“

      詳しくは「TPモニタの運用操作 2.40.5 スローダウン障害の検出」を参照してください。

採取資料

    イベントログ(アプリケーション、システム)・シスログ

    ジャーナル(採取方法は「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 障害解析」)

対象APの特定

    運用管理コマンドを使用すると、CPU使用率の高いプロセスグループを特定できます。以下のコマンドにより、全プロセスグループのCPU使用率を取得できます。このCPU使用率には、プロセスグループに含まれるプロセスのCPU使用率の合計が表示されます。

      otxadmin> get --monitor *.cpurate-Current

    統合運用管理ツールからも、プロセスグループごとのCPU使用率を確認することができます。
    プロセスグループの「動作情報」タブの「プロセス情報」で確認できます。
    「統計情報」のプロセスグループのCPU使用率からも確認できます。こちらはプロセスグループに含まれるプロセスのCPU使用率の合計が表示されます。

    オペレーションジャーナルを採取することにより、対象APを特定することもできます。

原因の特定

    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 実行時間上限の適正値算出」を参照してください。


関連情報

    APストールへの対応
    オペレーション遅延への対応
    実行時間超過への対応

    オペレーション呼び出しでの障害
    TPモニタ機能の障害解析

    トラブルシューティング(障害解析)