スレッド ダンプは、Java アプリケーションのトラブルシューティングに不可欠です。パフォーマンス関連、メモリ リーク、デバッグなどに取り組んでいる場合、スレッドとヒープ ダンプを取得するように求められることがよくあります。
ダンプを手動で取得することもできますが、自動的に実行したい場合は、その方法を次に示します。次のデモンストレーションは、以下に基づいています。
次のデモは WebSphere 9 に基づいていますが、手順は他の WAS バージョンと同様です。

JVM 停止時にスレッド ダンプを取得する
JVM が停止するたびにスレッド ダンプを取得したいというシナリオが考えられます。これは、誰がどのように JVM を停止しているかわからない場合に役立ちます。
これを設定するには;
- WebSphere管理コンソールへのログイン
- 「サーバー」 >> 「サーバー・タイプ」 >> 「WebSphere アプリケーション・サーバー」に移動します。
- JVM 内に移動し、「サーバー インフラストラクチャ」の下にある「Java とプロセス管理」を展開します。
- 「プロセス定義」をクリックします
- [追加プロパティ] >> [カスタム プロパティ] で [Java 仮想マシン] をクリックします。
- 「新規」をクリックし、「名前」を入力します。
com.ibm.ws.runtime.dumpShutdown
- true としての値
- 「OK」をクリックします
- 構成を確認して保存する
これで、JVM が停止するたびにヒープ ダンプが生成されるようになります。
JVM を停止すると、WAS サーバー上のプロファイル パスの下に次の javacore ファイルが表示されました。
-rw-r--r--. 1 root root 3179348 Nov 28 22:49 javacore.20161128.224916.4926.0001.txt
-rw-r--r--. 1 root root 3124208 Nov 28 22:49 javacore.20161128.224924.4926.0002.txt

ハング時にスレッド ダンプを取得する
ハング スレッドの問題が発生しており、現在ダンプを手動で取得している場合は、これを自動化できます。
基本的な構成を行うことにより、WebSphere は、スレッドが構成された時間内にハングするたびにダンプを生成します。
- WAS コンソールにログインし、それぞれの JVM 内に移動します。
- 「サーバーインフラストラクチャ」の下の「管理」を展開し、「カスタムプロパティ」をクリックします。
- 次の 3 つのプロパティを追加します
com.ibm.websphere.threadmonitor.threshold – スレッドが構成された時間ハングしたときにダンプを生成します。値は秒単位です。
com.ibm.websphere.threadmonitor.interval – スレッド・モニターがハングしたスレッドをチェックする頻度。秒単位の値。
com.ibm.websphere.threadmonitor.dump.java – 検出時にダンプを生成します。値は true です。
上記の構成では、スレッドが 600 秒間 ハングするたびにダンプが生成され、WebSphere は 300 秒 ごとにスレッドを監視します。
ダンプを取得したら、アプリケーションの問題を分析して修正できます。これがお役に立てば幸いです。
