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サーバのスレッドダンプの取得
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プロセスがほかに起動していない場合
ps -ef | grep 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コマンドを実行します。
kill -3 `cat namesv_pid`
(3) EJBクライアントアプリケーションのスレッドダンプの取得
EJBクライアントアプリケーションのスレッドダンプは,cjcldumpapコマンドを実行して取得します。
cjcldumpapコマンドを実行すると,cjclstartapコマンドを実行して起動したEJBクライアントアプリケーションのスレッドダンプが出力されます。また,特定のプロセスのスレッドダンプを出力することもできます。cjcldumpapコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjcldumpap(Javaアプリケーションのスレッドダンプの取得)」を参照してください。
cjcldumpapコマンドの実行形式,実行例,およびスレッドダンプの出力先を次に示します。
- 実行形式
-
- cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
cjcldumpap
- 特定のプロセスのスレッドダンプを出力する場合
cjcldumpap <プロセスID>
- 実行例
-
- cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
cjcldumpap
- 特定のプロセスのスレッドダンプを出力する場合
cjcldumpap 3264
- 出力先
-
cjclstartapコマンドを実行しているカレントディレクトリ