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

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

16.3 FJVMログの見方

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

■ファイル名

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

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

■出力先

 出力先は、Javaのカレントディレクトリです。
 IJServerの環境では、以下のようになります。

【Servletの場合】

 サーブレット・コンテナの実行ディレクトリとなります。
 JServlet環境定義ファイルの“[containername].execdir”で指定しますが、指定がない場合以下となります。

C:\Interstage\F3FMjs2
/opt/FJSVjs2

【EJBの場合】

(ワークユニット運用時) C:\Interstage\td\var\td001\tmp\is
(ejbdstartebによる運用時) C:\Interstage\ejb\var
(ワークユニット運用時) ワークユニット定義のカレントディレクトリ(注)/ワークユニット名/アプリケーション名/プロセスID
(ejbdstartebによる運用時) /opt/FJSVejb/var
注)ワークユニット定義の“Current Directory”の設定値です。

■出力情報と解析

 FJVMのログから、以下を確認できます。

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

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

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

(2)異常終了時のシグナルコード

 Javaがフックしているシグナルハンドラに対するシグナルコードが参照できます(下表を参照)。

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

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以外の処理でシグナルハンドラを書き換えています。Javaは、実行中にシグナルを使用しています。このため、シグナルハンドラを変更された場合、Javaの動作が保証されないことがありますので注意が必要です。

(3)ヒープ情報

 異常終了時のヒープ域の使用状況を参照できます。
 OutOfMemoryError発生後の異常終了時に、どのメモリが枯渇したのかわかります。
 ヒープ域が枯渇していない場合、仮想メモリが枯渇したことが考えられます。

■出力例

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

*************************************************************************************
#### Java VM: Java HotSpot(TM) Server VM (1.3.1_06_FUJITSU_MODIFIED-B18 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:
0xfb8e28 - 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
#
# 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_06_FUJITSU_MODIFIED-B18 mixed mode)
#

>>>> Start of VM status report

(3) シグナルコード
VMが当初設定したシグナルコード異常終了時のシグナルコードを参照できます。
ここでは、シグナルコードの変更はなく、問題は見出せません。

##>> Signal Handlers
 VM signal handler[1]=0xfee157cc, VM signal handler[2]=0xfefe92d0, SIG_DFL=0x0, SIG_IGN=0x1
  SIGSEGV           :signal handler=0xfefe92d0 (in VM *)
  SIGPIPE           :signal handler=0x1 (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) ヒープサイズ
ヒープサイズを参照できます。
New generation : new領域  tenured generation:old領域です。
この例の場合、かなり枯渇状態にあることがわかります。

##>> 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]

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

All Rights Reserved, Copyright(C) 富士通株式会社 2006