4.7.2 個別のコマンドを使用する場合
スレッドダンプの出力のされ方は,指定しているJ2EEサーバを実行するJavaVMの起動オプションによって異なります。
- -XX:+HitachiThreadDumpが設定されている場合,拡張スレッドダンプを取得できます。このオプションはデフォルトで設定されています。
- -XX:+HitachiThreadDumpToStdoutが設定されている場合,スレッドダンプは標準出力にも出力されます。このオプションはデフォルトでは設定されていません。必要に応じて設定してください。
- 次に示す起動オプションが設定されている場合に,-XX:+HitachiOutOfMemoryAbortThreadDumpが設定されていると,OutOfMemoryErrorによって強制終了した時に,スレッドダンプが出力されます。
- -XX:+HitachiOutOfMemoryAbort
- -XX:+HitachiThreadDump
ただし,次の場合は除きます。
- J2SEクラスライブラリでCヒープ不足が発生した場合
- JavaVMの処理中にCヒープ不足が発生した場合
- 次に示す起動オプションが設定されている場合に,-XX:+HitachiOutOfMemoryAbortThreadDumpWithJHeapProfが設定されていると,OutOfMemoryErrorによって強制終了した時に,スレッドダンプにクラス別統計情報が出力されます。クラス別統計情報については,「9.3 クラス別統計機能」を参照してください。このオプション設定時に出力されるクラス別統計情報は,jheapprofコマンド実行時に取得する情報と同じです。
- -XX:+HitachiOutOfMemoryAbort
- -XX:+HitachiOutOfMemoryAbortThreadDump
- -XX:+HitachiThreadDump
- <この項の構成>
- (1) J2EEサーバのスレッドダンプの取得
- (2) CORBAネーミングサービスのスレッドダンプの取得
- (3) EJBクライアントアプリケーションのスレッドダンプの取得
(1) J2EEサーバのスレッドダンプの取得
J2EEサーバプロセス(cjstartsv)が存在する場合,J2EEサーバのスレッドダンプは,cjdumpsvコマンドを実行して取得します。cjdumpsvコマンドの実行例を次に示します。時間の経過に応じた各スレッドの状態遷移を確認するため,複数回cjdumpsvコマンドを実行します。目安として3秒おきに10回程度実行します。
- Windowsの場合
<Application Serverのインストールディレクトリ>¥CC¥server¥bin¥cjdumpsv <J2EEサーバ名> |
- UNIXの場合
/opt/Cosminexus/CC/server/bin/cjdumpsv <J2EEサーバ名> |
cjdumpsvコマンドを実行すると,次に示すファイルにJavaVMのスレッドダンプが出力されます。
- サーバ標準出力ログ
- <作業ディレクトリ>¥ejb¥<サーバ名称>¥javacore<プロセス番号>.<コマンド実行日時>.txt(Windowsの場合)
- <作業ディレクトリ>/ejb/<サーバ名称>/javacore<プロセス番号>.<コマンド実行日時>.txt(UNIXの場合)
サーバ標準出力ログのデフォルトの出力先は「<ejb.server.log.directory>¥CC¥maintenance¥cjstdout.log」(Windowsの場合),または「<ejb.server.log.directory>/CC/maintenance/cjstdout.log」(UNIXの場合)です。出力先を変更している場合は,「4.3 アプリケーションサーバのログ(J2EEアプリケーションを実行するシステム)」または「4.4 アプリケーションサーバのログ(バッチアプリケーションを実行するシステム)」を参照してください。なお,作業ディレクトリのデフォルトのディレクトリパスは「<Application Serverのインストールディレクトリ>¥CC¥server¥public」(Windowsの場合),または「/opt/Cosminexus/CC/server/public」(UNIXの場合)です。
また,javacore<プロセス番号>.<コマンド実行日時>.txtファイルの出力先は,環境変数JAVACOREDIRで変更できます。ただし,指定したディレクトリへの書き込みに失敗した場合は,デフォルトの出力先に出力されます。このディレクトリにも出力できなかった場合は,標準エラー出力にだけ出力されます。
cjdumpsvコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjdumpsv(J2EEサーバのスレッドダンプの取得)」を参照してください。
- 参考
- スレッドダンプが出力されると,標準出力に,次のメッセージが出力され,javaプログラムの実行が継続されます。このメッセージは,-XX:+HitachiThreadDumpToStdoutの設定とは関係なく出力されます。
-
Writing Java core to <ファイル名(フルパス)>...OK |
-
(2) CORBAネーミングサービスのスレッドダンプの取得
Windowsの場合,CORBAネーミングサービスのプロセス(nameserv)が存在するときは,CORBAネーミングサービスを起動したコマンドプロンプトに対してCtrl+Breakキーを押します。時間の経過に応じた各スレッドの状態遷移を確認するため,複数回実行します。目安として3秒おきに10回程度実行します。なお,CORBAネーミングサービスをManagement Serverから監視している場合はスレッドダンプを取得できません。
UNIXの場合,CORBAネーミングサービスのプロセス(java)が存在するときは,killコマンドを実行してCORBAネーミングサービスのスレッドダンプを取得します。なお,CORBAネーミングサービスをManagement Serverから監視している場合はスレッドダンプを取得できません。
UNIXでのCORBAネーミングサービスのスレッドダンプの取得手順を次に示します。
- CORBAネーミングサービスのプロセスIDを取得します。
CORBAネーミングサービスのプロセスIDの取得方法は,次の場合によって異なります。
- javaプロセスがほかに起動していない場合
- javaプロセスが複数起動している場合
- CORBAネーミングサービスの起動用シェルスクリプトを使用すると,カレントワーキングディレクトリに生成されるnamesv_pidファイルにCORBAネーミングサービスのプロセスIDを出力できます。
- CORBAネーミングサービスの起動用シェルスクリプトの例を次に示します。
#!/bin/sh
export VBROKER_ADM=/opt/Cosminexus/TPB/adm
export SHLIB_PATH="${SHLIB_PATH}:/opt/Cosminexus/TPB/lib"
# start name server process
exec /opt/Cosminexus/TPB/bin/nameserv ¥
-J-Dvbroker.agent.enableLocator=false ¥
-J-Djava.security.policy==/opt/Cosminexus/CC/server/sysconf/cli.policy ¥
-J-Dvbroker.se.iiop_tp.scm.iiop_tp.listener.port=900 &
# save background java process pid
echo $! > ./namesv_pid |
- 取得したプロセスIDを指定して,killコマンドを実行します。
(3) EJBクライアントアプリケーションのスレッドダンプの取得
EJBクライアントアプリケーションのスレッドダンプは,cjcldumpapコマンドを実行して取得します。
cjcldumpapコマンドを実行すると,cjclstartapコマンドを実行して起動したEJBクライアントアプリケーションのスレッドダンプが出力されます。また,特定のプロセスのスレッドダンプを出力することもできます。cjcldumpapコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjcldumpap(Javaアプリケーションのスレッドダンプの取得)」を参照してください。
cjcldumpapコマンドの実行形式,実行例,およびスレッドダンプの出力先を次に示します。
- 実行形式
- cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
-
- 特定のプロセスのスレッドダンプを出力する場合
-
- 実行例
- cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
cjcldumpap
- 特定のプロセスのスレッドダンプを出力する場合
cjcldumpap 3264
- 出力先
- cjclstartapコマンドを実行しているカレントディレクトリ