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ログの収集タイミングとして,次のどちらかを指定します。
デフォルトは,論理サーバの停止前です。 |
△ |
△ |
(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) ユーザ作成の障害検知時コマンドのコマンドファイル作成
ユーザ作成の障害検知時コマンドは,コマンドファイル(バッチファイルまたはシェルスクリプトファイル)に記述できます。このとき,次の表に示す環境変数をコマンドファイルに記述しておくことで,障害の発生した論理サーバの情報や障害に関する情報を利用してコマンドを実行できます。
環境変数 |
説明 |
---|---|
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)の障害検知時コマンドの開始を通知するログが出力されます。