6.7.1 プロセスダウンのトラブルシュート

プロセスダウンのトラブルシュートについて説明します。

<この項の構成>
(1) プロセスダウン発生時の対処フロー
(2) プロセスダウン発生時の対処の流れ

(1) プロセスダウン発生時の対処フロー

プロセスダウンが発生した場合の,トラブルシュートの流れを次に示します。

図6-6 プロセスダウン発生時の対処フロー

[図データ]

フローの詳細で示した処理の詳細は(2)で説明します。

(2) プロセスダウン発生時の対処の流れ

プロセスダウンのフローの内容に沿って,それぞれの作業について説明します。

  1. エラーリポートファイル(hs_err_pid<プロセスID>.log)を開く
    エラーが発生した時刻近辺に出力されたエラーリポートファイルを開き,Managerのログと突き合わせます。
    • エラーリポートファイルの出力先および出力ファイル名
      C:¥Program Files¥Hitachi¥Cosminexus¥CC¥server¥public¥ejb¥<サーバ名称>¥hs_err_pid<サーバプロセスID>.log
  2. OutOfMemoryErrorが発生しているかどうか確認する
    OutOfMemoryErrorが発生している場合,「java.lang.OutOfMemoryError occurred.」が表示されています。
    OutOfMemoryErrorが発生している場合,およびOutOfMemoryErrorが発生していない場合について,それぞれエラーリポートファイルの出力例と対処を次に示します。
    OutOfMemoryErrorが発生している場合
    出力例

     :
    #
    # java.lang.OutOfMemoryError occurred.
    # JavaVM aborted because of specified -XX:+HitachiOutOfMemoryAbort options.
    # Please check Javacorefile:D:¥Cosminexus¥CC¥server¥public¥ejb¥MyJ2EEServer¥javacore2100.120124144835​.txt
    #

    太字で示した個所がOutOfMemoryErrorが発生している場合に出力される文字列です。
    対処
    エラーリポートファイルを調査する必要があります。手順3.へ進んでください。
    OutOfMemoryErrorが発生していない場合
    出力例

     :
    #
    # A fatal error has been detected by the Java Runtime Environment
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005​) at pc=0x0000000008303​b00, pid=1356, tid=2604
    #
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23-CDK0970-20150127​ mixed mode windows-amd64)
    # Problematic frame:
    # V  [C:¥Program Files¥Hitachi¥Cosminexus¥jdk¥jre¥bin¥server¥jvm.dll+0x303b00]
    #

    対処
    次のような調査が必要です。手順に従って調査してください。なお,手順の番号は図6-6と対応しています。
    3-1 シグナルが発生したライブラリを確認する
    出力例の赤字部分を確認し,ダウンしたライブラリ名,およびダウンしたネイティブ関数を控えてください。
    出力例の場合,ライブラリ名は「NativeCrash.dll」,ダウンしたネイティブ関数は「(null)+0x77C785BA」となります。
    3-2 シグナルを確認する
    「An unexpected error has been detected by HotSpot Virtual Machine:」で続く個所がシグナル6(SIGABRT,SIGIOT)でダウンしている場合,上位のabort関数でアボートしていることから呼び出し先のライブラリを調査する必要があります。
    上記の例はアボートしていません。
    この例では,Oracleのサポートに詳細な調査を依頼します。
    3-3 収集結果を問い合わせ窓口に送付する
    ひかえておいたライブラリ,およびシグナルの内容をモジュール開発元,またはご購入契約に基づくお問い合わせ窓口に送付して調査を依頼してください。
  3. 拡張verbosegc情報を確認してメモリサイズをチューニングする
    拡張verbosegc情報を確認して,Javaヒープのメモリサイズを調整します。
    ただし,ハード搭載メモリサイズを超えないように注意してください。
    • Windows x86の場合
      -Xmx1024mを指定してください。
      すでに-Xmx1024mを指定している場合は,同時実行スレッド数を小さくするか,複数のJ2EEサーバを起動させて負荷を分散させる必要があります。
    • Windows x64の場合
      設定済みの-Xmxオプションの値を目安として1.5倍~2倍にしてください。
  4. マシンを再起動する
    マシンを再起動して,問題なく動作できるか確認します。
    ポイント
    マシンを再起動し,問題なく動作した場合は,トラブルシュートは完了です。
    マシンを再起動してもうまく動作しない場合は,手順5.へ進んでください。
  5. クラス別統計情報を出力する
    JavaVMのGCのログ(javalog[n].log),または稼働情報ログ(HJVMStats_<YYYYMMDDhhmm><TZ>.csv)を確認し,メモリが10MB~20MB増加するごとにjheapprofコマンドを実行してクラス別統計情報(txtファイル)を出力します。
    メモリが100MB以上増加するまで繰り返してください。
    コマンドの実行間隔が短い場合,リークしているメモリサイズも小さいためメモリ増加しているクラスを探すのが難しくなります。
    実行間隔を長くしメモリの増分を大きくすることで,リークしているクラスを目立たせます。
    実行例
    % jheapprof -p 2463
    注意
    実行例の「2463」はプロセスIDになります。コマンドを実行する場合は問題となっているプロセスIDを指定してください。
  6. クラス構造一覧を出力する
    前の手順でピックアップしたクラスをメンバに持つクラスの構造を一覧に出力し,調査対象のクラスリストを作成し,調査対象をリストアップします。
    実行例
    % jheapprof -class org.apache.catalina.loader.WebappClassLoder -p 2463
    注意
    実行例の「2463」はプロセスIDになります。コマンドを実行する場合は問題となっているクラスを指定してください。
    実行例の「org.apache.catalina.loader.WebappClassLoder」はクラス名になります。Metaspace領域不足によるOutOfMemoryErrorはこのクラスを使って調べます。
  7. 開発元に調査を依頼する
    前回の手順で収集した情報を開発元へ送付して,調査を依頼してください。