Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 保守/移行編


3.3.1 障害検知時コマンドによる資料取得の設定(J2EEアプリケーションを実行するシステム)

ここでは,トラブルシューティングの資料を障害検知時コマンドで取得するための設定について説明します。障害検知時コマンドで取得した資料はsnapshotログとして収集できます。

障害検知時コマンドには,システムで提供しているコマンドとユーザが作成したコマンドの2種類があります。デフォルトの設定では,論理サーバにトラブルが発生した場合にシステム提供の障害検知時コマンドが実行されて,スレッドダンプや性能解析トレースなどが取得されます。また,トラブルが発生した論理サーバの停止前にsnapshotログが収集されます。システム提供の障害検知時コマンドで取得できる情報については,「2.3.2(1) システムで提供されている障害検知時コマンドで取得できる情報」を参照してください。

システム提供の障害検知時コマンドの動作設定を変更する場合には,「3.3.1(1) Management Serverでの環境設定」および「3.3.1(2) 運用管理エージェントでの環境設定」が必要です。また,ユーザ作成の障害検知時コマンドを利用する場合は,「3.3.1(1) Management Serverでの環境設定」,「3.3.1(2) 運用管理エージェントでの環境設定」および「3.3.1(3) ユーザ作成の障害検知時コマンドのコマンドファイル作成」が必要です。それぞれの設定内容について,(1)〜(3)で説明します。

注意事項

ユーザ作成の障害検知時コマンドで取得した資料をsnapshotログとして収集するためには,その資料の取得先をsnapshotログの収集先に追加する必要があります。snapshotログの収集先の追加については,「3.3.3(3) snapshotログの収集先のカスタマイズ」を参照してください。

〈この項の構成〉

(1) Management Serverでの環境設定

mserver.properties(Management Server環境設定ファイル)で,障害検知時コマンドの動作を設定します。

次のキーで,障害検知時コマンドの動作を設定します。

キー

説明

設定の要否

システム

ユーザ

com.cosminexus.mngsvr.sys_cmd.abnormal_end.enabled

システム提供の障害検知時コマンドを利用するかどうかを指定します。デフォルトは,true(利用する)です。

com.cosminexus.mngsvr.usr_cmd.abnormal_end.enabled

ユーザ作成の障害検知時コマンドを利用するかどうかを指定します。デフォルトは,false(利用しない)です。

com.cosminexus.mngsvr.sys_cmd.abnormal_end.timeout

システム提供の障害検知時コマンドの終了を待つ時間を指定します。指定時間を経過してもコマンドが終了しない場合は,ユーザ回復処理を続行します。

com.cosminexus.mngsvr.usr_cmd.abnormal_end.timeout

ユーザ作成の障害検知時コマンドの終了を待つ時間を指定します。

com.cosminexus.mngsvr.snapshot.auto_collect.enabled

障害発生時,または一括再起動時にsnapshotログを取得するかどうかを指定します。デフォルトは,true(snapshotログを取得する)です。

com.cosminexus.mngsvr.snapshot.collect.point

snapshotログの収集タイミングとして,次のどちらかを指定します。

  • 論理サーバの停止前

  • J2EEサーバの再起動前

デフォルトは,論理サーバの停止前です。

(凡例)

システム:システム提供の障害検知時コマンドでの設定の要否を示す

ユーザ:ユーザ作成の障害検知時コマンドでの設定の要否を示す

○:設定は必要

△:デフォルトの設定を変更する場合だけ必要

−:設定は不要

(2) 運用管理エージェントでの環境設定

adminagent.properties(運用管理エージェントプロパティファイル)で,障害検知時コマンドで取得する資料を設定します。

adminagent.propertiesの次のキーで,障害検知時コマンドで取得する資料の数や取得の有無,障害検知時コマンドのパスなどを設定します。なお,snapshotログの収集先を定義するためのsnapshotログ収集対象定義ファイルについては,「3.3.3(3) snapshotログの収集先のカスタマイズ」を参照してください。

キー

説明

設定の要否

システム

ユーザ

adminagent.snapshotlog.num_snapshots

一次送付資料として収集する,論理サーバごとのsnapshotログファイルの数を指定します。

adminagent.snapshotlog.listfile.2.num_snapshots

二次送付資料として収集する,論理サーバごとのsnapshotログファイルの数を指定します。

adminagent.j2ee.sys_cmd.abnormal_end.threaddump

システム提供の障害検知時コマンドで,スレッドダンプを取得するかどうかを指定します。

adminagent.sys_cmd.abnormal_end.prftrace

システム提供の障害検知時コマンドで,性能解析トレースファイルを取得するかどうかを指定します。

adminagent.<論理サーバの種類>.usr_cmd.abnormal_end

論理サーバの種類ごとに,実行する障害検知時コマンドのパスを指定します。

(凡例)

システム:システム提供の障害検知時コマンドでの設定の要否を示す

ユーザ:ユーザ作成の障害検知時コマンドでの設定の要否を示す

○:設定は必要

△:デフォルトの設定を変更する場合だけ必要

−:設定は不要

(3) ユーザ作成の障害検知時コマンドのコマンドファイル作成

ユーザ作成の障害検知時コマンドは,コマンドファイル(バッチファイルまたはシェルスクリプトファイル)に記述できます。このとき,次の表に示す環境変数をコマンドファイルに記述しておくことで,障害の発生した論理サーバの情報や障害に関する情報を利用してコマンドを実行できます。

表3‒7 ユーザ作成の障害検知時コマンドのコマンドファイルに記述できる環境変数

環境変数

説明

COSMI_MNG_LSNAME

障害の発生した論理サーバの論理サーバ名。なお,論理CTM内のネーミングサービスで障害が発生した場合は,論理CTMの論理サーバ名が設定されます。

COSMI_MNG_RSNAME

障害の発生した論理サーバの実サーバ名。J2EEサーバ以外の論理サーバの場合,論理サーバ名が設定されます。

COSMI_MNG_LSPID

論理サーバ起動時に監視対象となったプロセスID。間接起動の論理ユーザサーバで複数のプロセスIDが監視対象である場合,論理ユーザサーバ起動時に実行されるプロセスID取得用コマンドで取得された順に,コンマ(,)で区切って設定されます。

COSMI_MNG_LSARGS

論理サーバを起動したときのコマンドライン。

COSMI_MNG_TIME_SUSPENDED

ハングアップを検知した時刻。万国標準時(UTC)の1970年1月1日午前0時からの経過時間(単位:ms)。なお,無応答を検知しない場合,値は設定されません。

COSMI_MNG_TIME_TERMINATED

異常停止(プロセスダウン)を検知した時刻。万国標準時(UTC)の1970年1月1日午前0時からの経過時間(単位:ms)。なお,ハングアップの場合,値は設定されません。

COSMI_MNG_WEB_SYSTEM

障害が発生した論理サーバが所属するWebシステム。Smart Composer機能を使用しない場合,値は設定不要です。

COSMI_MNG_TIER

障害が発生した論理サーバが所属する物理ティア。Smart Composer機能を使用しない場合,値は設定不要です。

COSMI_MNG_UNIT

障害が発生した論理サーバが所属するサービスユニット。Smart Composer機能を使用しない場合,値は設定不要です。

COSMI_MNG_HWS

HTTP Serverのインストールディレクトリ。

なお,障害検知コマンドとして実行するコマンドから出力される標準出力,標準エラー出力は,Management Serverでは取得しません。このため,コマンドの標準出力,標準エラー出力を取得する場合は,コマンドの中でファイルに出力する必要があります。

(a) coreダンプの取得例

J2EEサーバの障害発生時にkillコマンドを実行してcoreダンプを取得する場合の例を次に示します。

  • UNIXの場合

    #!/bin/sh
     
    # 障害がプロセスダウンかハングアップかを,プロセスダウンを検知した時刻から判断する。
    if [ "$COSMI_MNG_TIME_TERMINATED" = "" ] ; then
     
    # 障害がハングアップであるため,coreダンプを取得する。
    /bin/kill -6 $COSMI_MNG_LSPID
    fi

(b) スレッドダンプの取得例

Webサーバの障害発生時に,cjdumpsvコマンドを実行してJ2EEサーバ(実サーバ名:J2EEServer)のスレッドダンプを取得する場合の例を次に示します。

この例では,時間の経過に応じた各スレッドの状態遷移を確認するため,複数回cjdumpsvコマンドを実行しています。cjdumpsvコマンドは,目安として3秒おきに10回程度実行します。

  • Windowsの場合

    rem 障害がプロセスダウンかハングアップかを環境変数から判断する。
    if defined COSMI_MNG_TIME_TERMINATED goto END
     
    rem 障害がハングアップであるため,スレッドダンプを取得する。
    set COUNT=10
    set INTERVAL=3000
    for /l %%n in (1,1,%COUNT%) do (
    "C:\Program Files\Hitachi\Cosminexus\CC\server\bin\cjdumpsv.exe" J2EEServer
       if not "%%n" == "%COUNT%" (
           rem 次のスレッドダンプ取得まで待機する。(ミリ秒)
           echo WScript.sleep %INTERVAL% > sleep.vbs
           "C:\WINDOWS\\system32\cscript.exe" sleep.vbs > NUL
           del sleep.vbs
       )
    )
    :END
  • UNIXの場合

    #!/bin/sh
     
    # 障害がプロセスダウンかハングアップかを環境変数から判断する。
    if [ "$COSMI_MNG_TIME_TERMINATED" = "" ] ; then
     
    # 障害がハングアップであるため,スレッドダンプを取得する。
    COUNT=10
    INTERVAL=3
    for num in `seq $COUNT`
    do
      /opt/Cosminexus/CC/server/bin/cjdumpsv J2EEServer
      if [ "$num" -ne  "$COUNT" ]; then
          # 次のスレッドダンプ取得まで待機する。(秒)
          sleep $INTERVAL
      fi
    done
    fi

(c) ユーザ作成の障害検知時コマンドの動作

論理CTMでは,グローバルCORBAネーミングサービスとCTMデーモンの二つのプロセスが起動,停止,監視されます。そのため,論理CTM内のグローバルCORBAネーミングサービスの障害を検知した場合とCTMデーモンの障害を検知した場合とでは,実行するコマンドが異なります。

  • グローバルCORBAネーミングサービスの障害を検出した場合

    adminagent.naming.usr_cmd.abnormal_endキーで指定したコマンドが実行されます。

  • CTMデーモンの障害を検出した場合

    adminagent.ctm.usr_cmd.abnormal_endキーで指定したコマンドが実行されます。

また,論理CTM内の二つのプロセス(CTMデーモン,グローバルCORBAネーミングサービス)のどちらのプロセスで障害を検知しても,Management Serverのログには,論理サーバ(CTM)の障害検知時コマンドの開始を通知するログが出力されます。