5.3.11 J2EEアプリケーションの実行状態の確認

J2EEアプリケーション内のメソッドでタイムアウトが発生したことを示すメッセージが出力された場合,またはメソッドキャンセルに失敗したことによってスレッドの状態が不正になったことを示すメッセージが出力された場合に,実行中のJ2EEアプリケーションの実行状態を確認します。確認結果によって,メソッドキャンセルを実行できるかどうかを判断します。

実行状態の確認には,サーバ管理コマンド(cjlistthread)を使用します。

なお,このコマンドは,スレッドの状態が遷移した時に取得したスタックトレースを確認する場合にも使用できます。ただし,スレッドの状態が「running」の場合は,スタックトレースは出力されません。また,スレッドの状態が「stopping」の場合は,複数回スタックトレースが出力されるため,遷移した時点のスタックトレースではなく,最新のスタックトレースが出力されます。

また,Webコンテナで設定している最大同時実行数を上回る数のスレッドが一覧に表示される事があります。

実行形式と実行例を次に示します。なお,cjlistthreadコマンドの詳細については,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「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-15 スレッドの状態とメソッドキャンセルの実行可否

スレッドの状態意味メソッドキャンセルの実行可否
running実行時間が監視されている状態です。正常に動作しています。実行できます。
timeoutメソッドタイムアウトによって,タイムアウトが検知された状態です。実行できます。
stoppingメソッドキャンセル処理が実行されている状態です。実行できません。
stoppedメソッドキャンセル処理の完了待ちの状態です。実行できません。
failedメソッドキャンセル処理が失敗した状態です。実行できます。

ただし,スレッドの状態がメソッドキャンセルを実行できる状態の場合でも,そのメソッドが保護区で実行されている場合は,メソッドはキャンセルできません。保護区については,「5.3.4 メソッドキャンセルとは」を参照してください。

ポイント
このコマンドで出力されるスレッドの情報は,cjlistthreadコマンドを実行した時点でのスナップショットです。このため,刻々と変化します。正確なスレッドの状態を取得するためには,複数回コマンドを実行して確認することをお勧めします。
また,-detailオプションを指定すると,実行結果の出力量が多くなります。-datailオプションを指定する場合は,出力先をファイルにすることをお勧めします。