Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 保守/移行編


4.7.2 個別のコマンドを使用する場合

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

〈この項の構成〉

(1) 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の場合)です。出力先を変更している場合は,「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ネーミングサービスのスレッドダンプの取得手順を次に示します。

  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`

(3) EJBクライアントアプリケーションのスレッドダンプの取得

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

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

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

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

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