概要
WebSphere Application Server Traditional環境においてdiagnostic plansによりアプリケーション・サーバーが任意のメッセージIDをトリガーとして、自動でDumpを生成することができます。
はじめに
WebSphere Application Server Traditional 環境では、カスタム・プロパティ "com.ibm.websphere.threadmonitor.dump.java=true" を使用することで、ハング・スレッド検出メッセージ WSVR0605Wが発生したときに javacore を生成することができます。
一方、diagnostic plans(診断計画) を利用すると、任意のメッセージ ID をトリガーとしてさまざまなDumpファイルを生成する設定を構成することができます。
診断計画を使用したトラブルシューティング・データの収集
https://www.ibm.com/docs/ja/was/9.0.5?topic=tools-collecting-troubleshooting-data-diagnostic-plans
ハング検出ポリシーの構成 — "com.ibm.websphere.threadmonitor.dump.java"
https://www.ibm.com/docs/ja/was-nd/9.0.5?topic=tools-configuring-hang-detection-policy
手順
diagnostic plans(診断計画)は、diagPlanMbeanを使用し構成し、wsadminコマンドにより開始します。
diagPlanMbeanを使用して、ハング検知時(WSVR0605W)にjavacore/heapdump/core dumpを取得することが可能です。
a. 該当AppServer名を指定
例)AppServer名 server1を指定
diagPlanMBean = AdminControl.queryNames('WebSphere:type=DiagPlanManager,process=server1,*')
b. 該当メッセージIDでどのようなDumpファイルを取得するか設定:
例)メッセージID:WSVR0605W出力時に30秒間隔をあけて、"javacore/heapdump/core dump"を3セット取得する設定
parms =["MATCH=TRACE:WSVR0605W*,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE"]
上記を踏まえて以下のようなJythonスクリプト (*.py) を作成し、wsadminで実行し設定を有効にします。
# Query to find the DiagnosticPlan MBean and create the objectName
diagPlanMBean = AdminControl.queryNames('WebSphere:type=DiagPlanManager,process=server1,*')
objName = AdminControl.makeObjectName(diagPlanMBean)
# Pass the diagnostic plan string as a parameter
parms =["MATCH=TRACE:WSVR0605W*,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE"]
# Run the setDiagPlan method in the MBean with the diagnostic plan string
AdminControl.invoke_jmx(objName, 'setDiagPlan', parms, ["java.lang.String"])
# Query to find the DiagnosticPlan MBean and create the objectName
diagPlanObjName = AdminControl.makeObjectName(diagPlanMBean)
# Run the getDiagPlan method in the Mbean
ret = AdminControl.invoke_jmx(diagPlanObjName, 'getDiagPlan',[],[])
# Display the results on the console
print ret
実行結果
- wsadminコマンド でdiagplan.pyを実行し、設定される内容がプロンプトに出力されるので確認
> wsadmin.sh -lang jython -f *****/diagplan.py
WASX7209I: ノード IBM-PF32ZYSFCellManager01 のプロセス "dmgr" に、SOAP コネクターを使用して接続しました。プロセスのタイプは DeploymentManager です。
*MATCH: [
TRACE: WSVR0605W*
]
JAVACORE
HEAPDUMP
SYSTEMCORE
DELAY: 30
JAVACORE
HEAPDUMP
SYSTEMCORE
DELAY: 30
JAVACORE
HEAPDUMP
SYSTEMCORE
2 ハングスレッド検知時に出力する"WSVR0605W"発生時に、javacore/heapdump/core dumpが出力
[26/02/16 13:39:09:398 JST] 0000009e ThreadMonitor W WSVR0605W: スレッド "WebContainer : 2" (000000c1) が 602416 ミリ秒間アクティブで、ハングしている可能性があります。 サーバー内には、ハングの可能性のあるスレッドが合計 1 本あります。
at pdpro.hang.MyLockA.upCountA(MyLockA.java:23)
at pdpro.hang.MyLockB.upCountBA(MyLockB.java:18)
at pdpro.hang.MyDeadlockServlet.doLockWork(MyDeadlockServlet.java:67)
at pdpro.hang.MyDeadlockServlet.doTask(MyDeadlockServlet.java:48)
at pdpro.hang.MyDeadlockServlet.doGet(MyDeadlockServlet.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.JavaDump を介して Java ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133909.14628.0001.txt' を使用する) を要求しました。
JVMDUMP010I Java ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133909.14628.0001.txt に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.JavaDump を介して Java ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133911.14628.0002.txt' を使用する) を要求しました。
JVMDUMP010I Java ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133911.14628.0002.txt に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.JavaDump を介して Java ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133911.14628.0003.txt' を使用する) を要求しました。
JVMDUMP010I Java ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133911.14628.0003.txt に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.HeapDump を介して Heap ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.133913.14628.0004.phd' を使用する) を要求しました。
JVMDUMP010I Heap ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.133913.14628.0004.phd に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.triggerDump を介して System ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.133913.14628.0005.dmp' を使用する) を要求しました。
JVMDUMP010I System ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.133913.14628.0005.dmp に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.JavaDump を介して Java ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133947.14628.0006.txt' を使用する) を要求しました。
JVMDUMP010I Java ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.133947.14628.0006.txt に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.HeapDump を介して Heap ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.133949.14628.0007.phd' を使用する) を要求しました。
JVMDUMP010I Heap ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.133949.14628.0007.phd に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.triggerDump を介して System ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.133949.14628.0008.dmp' を使用する) を要求しました。
JVMDUMP010I System ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.133949.14628.0008.dmp に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.JavaDump を介して Java ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.134021.14628.0009.txt' を使用する) を要求しました。
JVMDUMP010I Java ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/javacore.20260216.134021.14628.0009.txt に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.HeapDump を介して Heap ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.134023.14628.0010.phd' を使用する) を要求しました。
JVMDUMP010I Heap ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20260216.134023.14628.0010.phd に書き込まれました
JVMDUMP034I ユーザーは、com.ibm.jvm.Dump.triggerDump を介して System ダンプ ('/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.134024.14628.0011.dmp' を使用する) を要求しました。
JVMDUMP010I System ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/core.20260216.134024.14628.0011.dmp に書き込まれました
3 diagPlanMbeanの実行結果は、/profiles/(profile_name)/logs/(server_name)/diagPlanSummary.logに出力
-------
オカレンス・イベントの索引時刻
------+---------------------------------+------------------------------------------------------
0 2026-02-16T13:28:50.425+0900 新規診断プラン: "MATCH=TRACE:WSVR0605W*,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE,DELAY=30,JAVACORE,HEAPDUMP,SYSTEMCORE"
1 2026-02-16T13:28:50.425+0900 アクションの構文解析
2 2026-02-16T13:28:50.425+0900 次のアクションが追加されました:
MATCH: [
TRACE: WSVR0605W*
]
JAVACORE
HEAPDUMP
SYSTEMCORE
DELAY: 30
JAVACORE
HEAPDUMP
SYSTEMCORE
DELAY: 30
JAVACORE
HEAPDUMP
SYSTEMCORE
3 2026-02-16T13:28:50.433+0900 MATCH: [
TRACE: WSVR0605W*
] を開始しました。
4 2026-02-16T13:39:09.404+0900 トレース・ストリング WSVR0605W* に一致するトレースが次のメッセージで見つかりました: [26/02/16 13:39:09:398 JST] 0000009e ThreadMonitor W WSVR0605W: スレッド "WebContainer : 2" (000000c1) が 602416 ミリ秒間アクティブで、ハングしている可能性があります。 サーバー内には、ハングの可能性のあるスレッドが合計 1 本あります。
at pdpro.hang.MyLockA.upCountA(MyLockA.java:23)
at pdpro.hang.MyLockB.upCountBA(MyLockB.java:18)
at pdpro.hang.MyDeadlockServlet.doLockWork(MyDeadlockServlet.java:67)
at pdpro.hang.MyDeadlockServlet.doTask(MyDeadlockServlet.java:48)
at pdpro.hang.MyDeadlockServlet.doGet(MyDeadlockServlet.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
.....
5 2026-02-16T13:39:09.405+0900 MATCH: [
TRACE: WSVR0605W*
] が完了しました。
6 2026-02-16T13:39:09.407+0900 JAVACORE を開始しました。
7 2026-02-16T13:39:12.987+0900 JAVACORE が完了しました。 Java コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\javacore.20260216.133909.14628.0001.txt にあります。
8 2026-02-16T13:39:12.988+0900 HEAPDUMP を開始しました。
9 2026-02-16T13:39:13.846+0900 HEAPDUMP が完了しました。 ヒープ・ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\heapdump.20260216.133913.14628.0004.phd にあります。
10 2026-02-16T13:39:13.851+0900 SYSTEMCORE を開始しました。
11 2026-02-16T13:39:17.063+0900 SYSTEMCORE が完了しました。 システム・コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\core.20260216.133913.14628.0005.dmpにあります。
12 2026-02-16T13:39:17.063+0900 DELAY: 30 を開始しました。
13 2026-02-16T13:39:47.067+0900 DELAY: 30 が完了しました。
14 2026-02-16T13:39:47.072+0900 JAVACORE を開始しました。
15 2026-02-16T13:39:48.866+0900 JAVACORE が完了しました。 Java コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\javacore.20260216.133947.14628.0006.txt にあります。
16 2026-02-16T13:39:48.867+0900 HEAPDUMP を開始しました。
17 2026-02-16T13:39:49.694+0900 HEAPDUMP が完了しました。 ヒープ・ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\heapdump.20260216.133949.14628.0007.phd にあります。
18 2026-02-16T13:39:49.694+0900 SYSTEMCORE を開始しました。
19 2026-02-16T13:39:51.898+0900 SYSTEMCORE が完了しました。 システム・コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\core.20260216.133949.14628.0008.dmpにあります。
20 2026-02-16T13:39:51.898+0900 DELAY: 30 を開始しました。
21 2026-02-16T13:40:21.904+0900 DELAY: 30 が完了しました。
22 2026-02-16T13:40:21.904+0900 JAVACORE を開始しました。
23 2026-02-16T13:40:23.716+0900 JAVACORE が完了しました。 Java コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\javacore.20260216.134021.14628.0009.txt にあります。
24 2026-02-16T13:40:23.718+0900 HEAPDUMP を開始しました。
25 2026-02-16T13:40:24.553+0900 HEAPDUMP が完了しました。 ヒープ・ダンプは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\heapdump.20260216.134023.14628.0010.phd にあります。
26 2026-02-16T13:40:24.553+0900 SYSTEMCORE を開始しました。
27 2026-02-16T13:40:26.279+0900 SYSTEMCORE が完了しました。 システム・コアは /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/.\core.20260216.134024.14628.0011.dmpにあります。
28 2026-02-16T13:40:26.279+0900 すべての診断プラン・アクションが正常に完了しました。
まとめ
diagnostic plans(診断計画)により、任意のメッセージ ID をトリガーとして、さまざまな Dump ファイルを取得できることを確認しました。
また、Dump ファイルだけでなく、メッセージ ID をトリガーにトレース設定を有効化することも可能です。
設定方法などの詳細は、以下の参考情報にご参照をお願いいたします。
参考情報
診断計画を使用したトラブルシューティング・データの収集
https://www.ibm.com/docs/ja/was/9.0.5?topic=tools-collecting-troubleshooting-data-diagnostic-plans
診断計画を使用したトラブルシューティング・データの収集
https://www.ibm.com/docs/ja/was/8.5.5?topic=troubleshooting-collecting-data-diagnostic-plans
※ WAS v8.5は、v8.5.5.15 以降で diagnostic plans(診断計画)を使用できます。