J2EEアプリケーション内のメソッドでタイムアウトが発生したことを示すメッセージが出力された場合,またはメソッドキャンセルに失敗したことによってスレッドの状態が不正になったことを示すメッセージが出力された場合に,実行中のJ2EEアプリケーションの実行状態を確認します。確認結果によって,メソッドキャンセルを実行できるかどうかを判断します。
実行状態の確認には,サーバ管理コマンド(cjlistthread)を使用します。
なお,このコマンドは,スレッドの状態が遷移した時に取得したスタックトレースを確認する場合にも使用できます。ただし,スレッドの状態が「running」の場合は,スタックトレースは出力されません。また,スレッドの状態が「stopping」の場合は,複数回スタックトレースが出力されるため,遷移した時点のスタックトレースではなく,最新のスタックトレースが出力されます。
また,Webコンテナで設定している最大同時実行数を上回る数のスレッドが一覧に表示される事があります。
実行形式と実行例を次に示します。なお,cjlistthreadコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlistthread(スレッド情報の表示)」を参照してください。
cjlistthread <J2EEサーバ名> |
cjlistthread <J2EEサーバ名> -detail |
cjlistthread MyServer -detail
-detailオプションを指定した場合の実行結果の形式を次に示します。
Current Time=HH:MM:SS |
実行結果の,「Status=」の後ろに出力されているのが,スレッドの状態です。
スレッドの状態とメソッドキャンセルの実行可否を,次の表に示します。
表5-15 スレッドの状態とメソッドキャンセルの実行可否
スレッドの状態 | 意味 | メソッドキャンセルの実行可否 |
---|---|---|
running | 実行時間が監視されている状態です。正常に動作しています。 | 実行できます。 |
timeout | メソッドタイムアウトによって,タイムアウトが検知された状態です。 | 実行できます。 |
stopping | メソッドキャンセル処理が実行されている状態です。 | 実行できません。 |
stopped | メソッドキャンセル処理の完了待ちの状態です。 | 実行できません。 |
failed | メソッドキャンセル処理が失敗した状態です。 | 実行できます。 |
ただし,スレッドの状態がメソッドキャンセルを実行できる状態の場合でも,そのメソッドが保護区で実行されている場合は,メソッドはキャンセルできません。保護区については,「5.3.4 メソッドキャンセルとは」を参照してください。