5.3.11 J2EEアプリケーションの実行状態の確認
J2EEアプリケーション内のメソッドでタイムアウトが発生したことを示すメッセージが出力された場合,またはメソッドキャンセルに失敗したことによってスレッドの状態が不正になったことを示すメッセージが出力された場合に,実行中のJ2EEアプリケーションの実行状態を確認します。確認結果によって,メソッドキャンセルを実行できるかどうかを判断します。
実行状態の確認には,サーバ管理コマンド(cjlistthread)を使用します。
なお,このコマンドは,スレッドの状態が遷移した時に取得したスタックトレースを確認する場合にも使用できます。ただし,スレッドの状態が「running」の場合は,スタックトレースは出力されません。また,スレッドの状態が「stopping」の場合は,複数回スタックトレースが出力されるため,遷移した時点のスタックトレースではなく,最新のスタックトレースが出力されます。
また,Webコンテナで設定している最大同時実行数を上回る数のスレッドが一覧に表示される事があります。
実行形式と実行例を次に示します。なお,cjlistthreadコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlistthread(スレッド情報の表示)」を参照してください。
- 実行形式
cjlistthread <J2EEサーバ名>
-detailオプションを指定すると,動作中のスレッド情報の詳細として,スタックトレースも出力できます。
cjlistthread <J2EEサーバ名> -detail
- 実行例
cjlistthread MyServer -detail
-detailオプションを指定した場合の実行結果の形式を次に示します。
- 実行結果
Current Time=HH:MM:SS ThreadID=11111,RootApInfo=RootAP1,Status=timeout,AppName=AP1,StartTime=HH:MM:SS,TimeOut=60 com.hitachi.XXXX at com.hitachi.YYYY at user.code.UserClass1 at com.hitachi.ZZZZ . . . ThreadID=22222,RootApInfo=RootAP2,Status=stopping,AppName=AP2,StartTime=HH:MM:SS,TimeOut=60 com.hitachi.xxxx at com.hitachi.yyyy at user.code.UserClass2 at com.hitachi.zzzz
実行結果の,「Status=」の後ろに出力されているのが,スレッドの状態です。
スレッドの状態とメソッドキャンセルの実行可否を,次の表に示します。
ただし,スレッドの状態がメソッドキャンセルを実行できる状態の場合でも,そのメソッドが保護区で実行されている場合は,メソッドはキャンセルできません。保護区については,「5.3.4 メソッドキャンセルとは」を参照してください。
- ポイント
-
このコマンドで出力されるスレッドの情報は,cjlistthreadコマンドを実行した時点でのスナップショットです。このため,刻々と変化します。正確なスレッドの状態を取得するためには,複数回コマンドを実行して確認することをお勧めします。
また,-detailオプションを指定すると,実行結果の出力量が多くなります。-datailオプションを指定する場合は,出力先をファイルにすることをお勧めします。