Cosminexus システム運用ガイド

[目次][用語][索引][前へ][次へ]

5.4.5 JavaVMのスレッドダンプの取得

ここでは,JavaVMのスレッドダンプを取得する方法について説明します。

JavaVMのスレッドダンプは,次の方法で取得できます。

それぞれの方法について次に説明します。

<この項の構成>
(1) 運用管理コマンドを使用する場合
(2) 個別のコマンドを使用する場合

(1) 運用管理コマンドを使用する場合

運用管理コマンド(mngsvrutil)を利用したJavaVMのスレッドダンプの取得は,mngsvrutilコマンドのサブコマンド「dump」の引数にserverを指定して実行します。

次のスレッドダンプを取得できます。

mngsvrutilコマンドおよびそのサブコマンドの詳細については,マニュアル「Cosminexus リファレンス コマンド編」を参照してください。

実行形式,実行例,および出力先を次に示します。

実行形式
 
mngsvrutil -m <Management Serverのホスト名> -u <管理ユーザID> -p <管理パスワード> -t <論理サーバ名> dump server
 
 

実行例
mngsvrutil -m mnghost -u user01 -p pw1 -t myserver dump server
 

出力先
J2EEサーバを対象にする場合
  • Windowsの場合
    <作業ディレクトリ>\ejb\<サーバ名称>\javacore*.txt
  • UNIXの場合
    <作業ディレクトリ>/ejb/<サーバ名称>/javacore*.txt
注※ <作業ディレクトリ>は,J2EEサーバのユーザ定義(usrconf.cfgファイル中のejb.public.directory)で指定されたディレクトリを指します。デフォルト値は,次のとおりです。
  • Windowsの場合
    <Cosminexusのインストールディレクトリ>\CC\server\public
  • UNIXの場合
    /opt/Cosminexus/CC/server/public
SFOサーバを対象にする場合
  • Windowsの場合
    <Cosminexusのインストールディレクトリ>\CC\server\public\ejb\<サーバ名称>\javacore*.txt
  • UNIXの場合
    /opt/Cosminexus/CC/server/public/ejb/<サーバ名称>/javacore*.txt
CORBAネーミングサービスおよびCTMを対象にする場合
  • Windowsの場合
    <Cosminexusのインストールディレクトリ>\TPB\logj\javacore*.txt
  • UNIXの場合
    /opt/Cosminexus/TPB/logj/javacore*.txt

(2) 個別のコマンドを使用する場合

スレッドダンプの出力のされ方は,指定しているJ2EEサーバを実行するJavaVMの起動オプションによって異なります。

(a) J2EEサーバのスレッドダンプの取得

J2EEサーバプロセス(cjstartsv)が存在する場合,J2EEサーバのスレッドダンプは,cjdumpsvコマンドを実行して取得します。cjdumpsvコマンドの実行例を次に示します。時間の経過に応じた各スレッドの状態遷移を確認するため,複数回cjdumpsvコマンドを実行します。目安として3秒おきに10回程度実行します。

cjdumpsvコマンドを実行すると,次に示すファイルにJavaVMのスレッドダンプが出力されます。

サーバ標準出力ログのデフォルトの出力先は「<ejb.server.log.directory>\CC\maintenance\cjstdout.log」(Windowsの場合),または「<ejb.server.log.directory>/CC/maintenance/cjstdout.log」(UNIXの場合)です。出力先を変更している場合は,「5.4.1 Cosminexusのログの取得(J2EEアプリケーションを実行するシステム)」または「5.4.2 Cosminexusのログの取得(バッチアプリケーションを実行するシステム)」を参照してください。なお,作業ディレクトリのデフォルトのディレクトリパスは「<Cosminexusのインストールディレクトリ>\CC\server\public」(Windowsの場合),または「/opt/Cosminexus/CC/server/public」(UNIXの場合)です。

また,javacore<プロセス番号>.<コマンド実行日時>.txtファイルの出力先は,環境変数JAVACOREDIRで変更できます。ただし,指定したディレクトリへの書き込みに失敗した場合は,デフォルトの出力先に出力されます。このディレクトリにも出力できなかった場合は,標準エラー出力にだけ出力されます。

cjdumpsvコマンドの詳細については,マニュアル「Cosminexus リファレンス コマンド編」を参照してください。

参考
スレッドダンプが出力されると,標準出力に,次のメッセージが出力され,javaプログラムの実行が継続されます。このメッセージは,-XX:+HitachiThreadDumpToStdoutの設定とは関係なく出力されます。
 
 
Writing Java core to <ファイル名(フルパス)>...OK
 
 
(b) CORBAネーミングサービスのスレッドダンプの取得

Windowsの場合,CORBAネーミングサービスのプロセス(nameserv)が存在するときは,CORBAネーミングサービスを起動したコマンドプロンプトに対してCtrl+Breakキーを押します。時間の経過に応じた各スレッドの状態遷移を確認するため,複数回実行します。目安として3秒おきに10回程度実行します。なお,CORBAネーミングサービスをManagement Serverから監視している場合はスレッドダンプを取得できません。

UNIXの場合,CORBAネーミングサービスのプロセス(java)が存在するときは,killコマンドを実行してCORBAネーミングサービスのスレッドダンプを取得します。なお,CORBAネーミングサービスをManagement Serverから監視している場合はスレッドダンプを取得できません。

UNIXでのCORBAネーミングサービスのスレッドダンプの取得手順を次に示します。

  1. 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
  2. 取得したプロセスIDを指定して,killコマンドを実行します。
     
    kill -3 `cat namesv_pid`
(c) EJBクライアントアプリケーションのスレッドダンプの取得

EJBクライアントアプリケーションのスレッドダンプは,cjcldumpapコマンドを実行して取得します。

cjcldumpapコマンドを実行すると,cjclstartapコマンドを実行して起動したEJBクライアントアプリケーションのスレッドダンプが出力されます。また,特定のプロセスのスレッドダンプを出力することもできます。cjcldumpapコマンドの詳細については,マニュアル「Cosminexus リファレンス コマンド編」を参照してください。

cjcldumpapコマンドの実行形式,実行例,およびスレッドダンプの出力先を次に示します。

実行形式
cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
cjcldumpap
 
特定のプロセスのスレッドダンプを出力する場合
cjcldumpap <プロセスID>
 

実行例
cjclstartapコマンドを使用して起動したEJBクライアントアプリケーションのスレッドダンプを出力する場合
cjcldumpap
特定のプロセスのスレッドダンプを出力する場合
cjcldumpap 3264

出力先
cjclstartapコマンドを実行しているカレントディレクトリ