Interstage Application Server トラブルシューティング集
目次 索引 前ページ次ページ

第18章 Java実行環境運用時の異常

18.4 FJVMログの見方

 FJVM動作時に何らかの理由により異常終了した場合、FJVMログが出力されます。
 このFJVMログの情報から、調査のための情報を得ることができます。

■ファイル名

 ファイル名は次のとおりです。

fjvm_pidXXXX.log
XXXXは、プロセスのID番号が入ります。

■出力先

 FJVMログが格納されるファイルの出力先は、Javaプロセス実行時のカレントディレクトリです。
 詳細は、“J2EE ユーザーズガイド”の“J2EEアプリケーションが運用される環境(IJServer)”を参照してください。

■出力情報と解析

 FJVMのログは異常終了時に各種の情報を出力しますが、その中から以下を確認できます。

(1)異常終了箇所の情報

 以下の情報が出力されます。

 異常終了した関数名、ライブラリ名、例外のシグナルから調査を行えます。
 該当する関数がアプリケーションである場合、まず、そのアプリケーションにどのような問題があるか、シグナルコードとアドレスから調査を開始します。
 該当する関数名、ライブラリ名でない場合、次にスタックトレースを調査します。
 スタックトレースについては、“スレッドダンプの見方”を参照してください。

補足

 異常終了時に発生した例外に関するシグナルコードの情報として以下の表記がある場合、例外が発生したスレッドでスタックオーバーフローが検出されています。
 例外を検出したスレッドに対するスタックサイズを大きくすることで問題が解決する可能性があります。

(2)異常終了時のシグナルハンドラ情報

 Java VMの実行制御で必要となる以下の各シグナルに対するシグナルハンドラ情報(登録されているシグナルハンドラのアドレス,登録されているシグナルハンドラがJava VMで登録したシグナルハンドラかどうかの正否)が確認できます。

ログ出力で表記されるシグナルコード

Solaris版FJVM

Linux版FJVM

SIGSEGV
SIGPIPE
SIGBUS
SIGILL
SIGFPE
INTERRUPT_SIGNAL
ASYNC_SIGNAL (1.4.1のみ)
SIGINT
SIGHUP
SIGTERM

SIGSEGV
SIGPIPE
SIGBUS
SIGILL
SIGFPE
SIGCHLD

 Java VM以外の処理で登録されたシグナルハンドラが設定されていた場合(シグナルハンドラ情報として、各シグナルに対する行の表記中に「(not in VM)」がある場合)、Java VMは正常に動作しません。この場合、当該シグナルハンドラを登録しない様に、実行するアプリケーションを修正します。

Solaris OE版FJVM 1.3.1では、Java VMの実行制御としてSIGPIPEシグナルを無視(SIG_IGN)に設定しています。そのためSolaris OE版FJVM 1.3.1で発生した異常終了時のFJVMログでは、SIGPIPEシグナルに関するシグナルハンドラ情報は出力しません。

(3) 異常終了時のJavaヒープ領域に関する情報

 異常終了時のJavaヒープ領域の使用状況が確認できます。
 Javaヒープ領域量に因る異常終了の場合、異常終了時にどのJavaヒープ領域の枯渇により異常終了が発生したのかが確認できます。

■出力例

 注)表示の関係上、改行している箇所があるため、実際の出力形式とは若干の違いがあります。

*************************************************************************************
#### Java VM: Java HotSpot(TM) Server VM (1.3.1_FUJITSU_MODIFIED-B** mixed mode)
>>>> Logging process start. [pid=7886] Time=Thu Aug 14 16:09:01 2003

(1) 異常終了箇所の情報
libjvm.soのsysThreadAvailableStackWithSlack関数近くでSIGSEGV(メモリアクセスで不正なセグメントを参照)が発生と判明。
本例はアプリケーションではなく、システム内部で異常が発生しているとわかります。

Unexpected Signal : SIGSEGV occurred at PC=0xff092068
Function name=sysThreadAvailableStackWithSlack
Library=/opt/FJSVawjbk/jdk13/jre/lib/sparc/fjvm/libjvm.so

(2) スタックトレース
異常が発生したスタックのトレース情報が参照できます。
ここでは、com.appli.ap.business.AL02ABB00000.toStringの延長で不正なアクセスが発生しているので、そこからAL02ABB00000.javaの489行目で不正なアクセスを招きそうな箇所がないか調べます。

Current Java thread:
0xfb8e2850 - 0xfb8e4b7c
    at com.appli.ap.business.AL02ABB00000.toString(AL02ABB00000.java:489)
0xfb8e2850 - 0xfb8e4b7c
    at com.appli.ap.business.AL02ABB00000.toString(AL02ABB00000.java:520)
    at java.lang.String.valueOf(String.java:1942)
    at java.lang.StringBuffer.append(StringBuffer.java:365)
 - locked <f6db38d8> (a java.lang.StringBuffer)
    at com.appli.ap.business.AL02ABB25201.doExecute(AL02ABB25201.java:774)
    at com.appli.ap.formula.AFCC6842.doDelegate(AFCC6842.java:221)
    at com.appli.ap.formula.ejb.session.AFSF6801.doExecuteOrdinarily
        (AFSF6801.java:381)
    at com.appli.ap.formula.ejb.session.FJAFSF6801_AFSF6801RemoteImpl.
        doExecuteOrdinarily(FJAFSF6801_AFSF6801RemoteImpl.java:464)
 - locked <df672838> (a com.appli.ap.formula.ejb.session.FJAFSF6801_AFSF6801RemoteImpl)
    at com.appli.ap.formula.ejb.session._FJAFSF6801_AFSF6801RemoteImpl_Tie._invoke
        (_FJAFSF6801_AFSF6801RemoteImpl_Tie.java:76)
0xfb98c930 - 0xfb98cc68
    at com.fujitsu.ObjectDirector.CORBA.ServerRequest.call_invoke
        (ServerRequest.java:961)
    at com.fujitsu.ObjectDirector.PortableServer.POA.MsgRecv(POA.java:2578)
    at com.fujitsu.ObjectDirector.PortableServer.POAManager.MsgRecv
        (POAManager.java:1061)
    at com.fujitsu.ObjectDirector.PortableServer.POAnc.MsgRecv(POAnc.java:163)

Dynamic libraries:
0x10000       /opt/FJSVawjbk/jdk13/bin/../bin/sparc/native_threads/java
0xff360000    /usr/lib/lwp/libthread.so.1
0xff390000    //lib/libdl.so.1
〜〜〜〜〜〜〜
略
〜〜〜〜〜〜〜
0xbef70000    //lib/libgen.so.1
0xbd6b0000    //lib/libextpiswu.so
0xbef50000    /opt/FJSVawjbk/jdk13/jre/lib/sparc/libioser12.so

Local Time = Thu Aug 14 16:09:01 2003
Elapsed Time = 9885

注意:

 Error IDとして出力されている値は、Java VMが内部処理矛盾を自己検出した場合に出力する内部情報コードです。SIGSEGVやSIGBUSなどOSが検出した異常の場合には、常に同じ値(4F530E435050****)が出力されます.そのためError IDの先頭が「4F530E435050」で始まるコードの場合は、通常、意味を持ちません。Error IDの先頭が「4F530E435050」以外で始まるコードの場合には、障害情報検索時や判断時のキーワード情報としての意味を持ちます。

#
# HotSpot Virtual Machine Error : SIGSEGV
# Error ID : 4F530E43505002CE (share.vm.runtime.os.cpp, 718) [ Patched ]
# Please report this error to FUJITSU
#
# Java VM: Java HotSpot(TM) Server VM (1.3.1_FUJITSU_MODIFIED-B** mixed mode)
#

>>>> Start of VM status report

(3)異常終了時のシグナルハンドラ情報(Solaris OE版/Linux版)
異常終了時のシグナルハンドラに関する情報が確認できます。
本例では、すべて「(in VM)」表示なので、シグナルハンドラの登録変更に関する問題はありません。

##>> Signal Handlers
 VM signal handler[1]=0xfee157cc, VM signal handler[2]=0xfefe92d0, SIG_DFL=0x0, SIG_IGN=0x1, INT_SIG=(16,16)
  SIGSEGV           :signal handler=0xfefe92d0 (in VM *)
  SIGBUS            :signal handler=0xfee157cc (in VM)
  SIGILL            :signal handler=0xfee157cc (in VM)
  SIGFPE            :signal handler=0xfee157cc (in VM)
  INTERRUPT_SIGNAL  :signal handler=0xfee157cc (in VM)

(4)異常終了時のJavaヒープ領域に関する情報
 異常終了時のJavaヒープ領域に関する情報が確認できます。
「new generation」が「New世代領域」、
「tenured generation」が「Old世代領域」、
「permanent generation」が「Permanent世代領域」
に関する情報です。
 本例(-Xmx値として512mを指定、他はデフォルト値)の場合、異常終了時点における「New世代領域」+「Old世代領域」の領域(-Xmxで最大量が指定される領域)の空きが、かなり枯渇していることが判ります。
 また「Permanent世代領域」に対しては、余裕があることが判ります。

注意:

 各情報内にパーセント表示の値がありますが、その値は異常終了した時点でFJVMがリザーブしているメモリ量に対する比率であり、利用可能な上限値に対する比率ではありません。K(キロ)単位で表示されているメモリ使用量の値と、オプションで指定された値(デフォルト値を含む)とを比較して判断してください。

##>> Heap
 new generation       total 2560K, used 2560K [0xc4400000, 0xd7800000]
  eden space   2304K, 100% used [0xcb060000,0xcb2a0000,0xcb2a0000]
  from space    256K, 100% used [0xcb020000,0xcb060000,0xcb060000]
  to   space      0K, 2147483647% used [0xd1cb0000,0xd1cb0000,0xd1cb0000]
 tenured generation   total 520192K, used 520187K [0xd7800000, 0xf7400000]
  old  space 520192K, 99% used [0xd7800000,0xf73feeb0,0xf7400000]
 permanent generation total 12032K, used 11939K [0xf7400000, 0xfb400000]
  old  space  12032K, 99% used [0xf7400000,0xf7fa8f88,0xf7fc0000]
*************************************************************************************

目次 索引 前ページ次ページ

Copyright 2006 FUJITSU LIMITED