7.7.9 性能解析トレースファイルとスレッドダンプを対応づけた問題個所の調査
J2EEアプリケーションまたはバッチアプリケーションでスローダウンやハングアップが発生したときに,性能解析トレースファイルとスレッドダンプを対応づけることで,問題が発生した個所を調査できます。
性能解析トレースファイルとスレッドダンプの対応づけには,性能解析トレースファイルに出力されたスレッドIDと,スレッドダンプに出力されたスレッド情報のnativeID(OSレベルのスレッドID)を使用します。ここでは,性能解析トレースファイルから対応するスレッドダンプを特定する方法について説明します。
性能解析トレースファイルから対応するスレッドダンプを特定する手順を次に示します。
-
性能解析トレースファイル,およびスレッドダンプを収集します。
性能解析トレースファイルの収集方法については,「7.3.1 性能解析トレースファイルの収集方法」を参照してください。スレッドダンプの収集方法については,「4.7 JavaVMのスレッドダンプ」を参照してください。
-
使用する性能解析トレースファイル,およびスレッドダンプを選びます。
性能解析トレースファイルとスレッドダンプが出力された時刻を基に,調査に使用する性能解析トレースファイル,およびスレッドダンプを選びます。出力された時刻は,次の情報を参考にしてください。
- 性能解析トレースファイル
-
「Time」および「Time(msec/usec/nsec)」
性能解析トレースファイルの「Time」および「Time(msec/usec/nsec)」の例を次の図に示します。
- スレッドダンプ
-
ファイル名,およびファイルの末尾に出力される時刻
ファイルの末尾に出力される時刻の例を次に示します。
: : Full thread dump completed. Fri Jul 21 19:22:47 2006
-
性能解析トレースファイルの調査したいイベントIDに対応する「Thread(hashcode)」の値を16進数に変換します。
-
WindowsおよびAIXの場合
Thread(スレッドID)の値を10進数から16進数に変換します。
-
Linuxの場合
hashcode(ハッシュコード)の値を10進数から16進数に変換します。
-
-
手順3.で16進数に変換した「Thread(hashcode)」の値と一致するスレッド情報を探して,対応するスレッド情報を特定します。
-
WindowsおよびAIXの場合
スレッドダンプの「nid」が,16進数に変換したThread(スレッドID)の値(1124)と一致するスレッド情報を探します。
: : "VBJ ThreadPool Worker" daemon prio=5 jid=0x00054f93 tid=0x04cef380 nid=0x1124 in Object.wait() [0x0632f000..0x0632fd18] stack=[0x06330000..0x062f5000..0x062f1000..0x062f0000] [user cpu time=0ms, kernel cpu time=15ms] [blocked count=1, waited count=29] at java.lang.Object.wait(Native Method) : :
-
Linuxの場合
スレッドダンプの「jid」が,16進数に変換したhashcode(ハッシュコード)の値(6d75)と一致するスレッド情報を探します。
: : "main" prio=1 jid=0x00006d75 tid=0x00201d70 nid=0x1e51 waiting on condition [0x00000000..0xbfe80488] stack=[0xbfe87000..0xbfc8c000..0xbfc88000..0xbfc87000] [user cpu time=1320ms, kernel cpu time=4280ms] [blocked count=5, waited count=4] : :
-