Interstage Application Server トラブルシューティング集 |
目次
索引
![]() ![]() |
第19章 Java実行環境運用時の異常 |
何らかの原因によりFJVMを実行させているJavaプロセスが異常終了した場合、FJVMログが出力されます。
このFJVMログとして出力された情報から、Javaプロセスが異常終了した原因を調査するための情報を得ることができます。
FJVMログが格納されるファイル名は以下のとおりです。
fjvm_pid***.log (***は異常終了したJavaプロセスのプロセスID)
FJVMログが格納されるファイルの出力先は、Javaプロセス実行時のカレントディレクトリです。
詳細は、“J2EE ユーザーズガイド”の“J2EEアプリケーションが運用される環境(IJServer)”を参照してください。
FJVMログとしてJavaプロセス異常終了時の各種情報を出力しますが、その中から以下の情報を原因調査用の情報として使用することができます。
異常終了箇所に関する以下の情報が確認できます。
発生した例外に関する情報(シグナルコードおよび例外発生アドレス)、異常終了した関数名およびライブラリ名から調査を開始します。
まず異常終了した関数が、実行しているJavaアプリケーションから呼び出す関数かどうかを確認します(異常終了した関数名として出力される名前は、異常終了したアドレスに一番近いシンボル名情報であるため,実際に異常終了した関数とは別の名前が出力されている場合がありますので注意してください).
実行しているJavaアプリケーションが使用する関数の場合には、当該関数使用に際して何らかの問題がないか確認します。
実行しているJavaアプリケーションで使用していない関数の場合には、スタックトレースを調査します。
スタックトレースの見方は、“スタックトレース”を参照してください。
補足
異常終了時に発生した例外に関するシグナルコードの情報として以下の表記がある場合、例外が発生したスレッドでスタックオーバーフローが検出されています。
例外を検出したスレッドに対するスタックサイズを大きくすることで問題が解決する可能性があります。
- SIGSEGV (Stack Overflow)
![]()
![]()
- EXCEPTION_STACK_OVERFLOW
![]()
スタックオーバーフローが原因で発生した異常終了の場合、FJVMの処理へ制御が渡らず、そのままWindowsのワトソン博士へ制御が渡されることがあります。その場合はFJVMログが出力されないため、ワトソン博士が出力するログファイル「drwtsn32.log」の出力結果を確認してください。
例外番号として以下の情報が出力されている場合には、スタックオーバーフローが原因と考えられます。c00000fd (スタックオーバーフロー)
Java VMの実行制御で必要となる以下の各シグナルに対するシグナルハンドラ情報(登録されているシグナルハンドラのアドレス,登録されているシグナルハンドラがJava VMで登録したシグナルハンドラかどうかの正否)が確認できます。
Solaris版Java VM |
Linux版Java VM |
---|---|
SIGSEGV |
SIGSEGV |
Java VM以外の処理で登録されたシグナルハンドラが設定されていた場合(シグナルハンドラ情報として、各シグナルに対する行の表記中に「(not in VM)」がある場合)、Java VMは正常に動作しません。この場合、当該シグナルハンドラを登録しない様に、実行するアプリケーションを修正します。
Solaris版FJVM 1.3.1では、Java VMの実行制御としてSIGPIPEシグナルを無視(SIG_IGN)に設定しています。そのためSolaris版FJVM 1.3.1で発生した異常終了時のFJVMログでは、SIGPIPEシグナルに関するシグナルハンドラ情報は出力しません。
異常終了時のJavaヒープ領域の使用状況が確認できます。
Javaヒープ領域量に因る異常終了の場合、異常終了時にどのJavaヒープ領域の枯渇により異常終了が発生したのかが確認できます。
Solaris版FJVM 1.4.2での出力例を元に説明します。
-------------------------------------------------------------------------------- #### Java VM: Java HotSpot(TM) Server VM (1.4.2_FUJITSU_MODIFIED-B** mixed mode) >>>> Logging process start. [pid=7886] Time=Thu Aug 14 16:09:01 2004
(1) 異常終了箇所の情報
異常終了箇所に関する情報が確認できます。
libjvm.soのsysThreadAvailableStackWithSlack関数の近くでSIGSEGV(メモリアクセスで不正なセグメントを参照)が発生しています。
本例の場合、Java VM内で異常が発生していると判断します。
異常終了箇所がJavaアプリケーション内でないため、異常発生時のスタックトレース情報を調査します。
本例の場合、com.appli.ap.business.AL02ABB00000.toStringの延長で不正なアクセスが発生しているので、そこからAL02ABB00000.javaの489行目で不正なアクセスを招きそうな箇所がないか調べます。
Unexpected Signal : SIGSEGV (0xb) occurred at PC=0xff092068 Function name=sysThreadAvailableStackWithSlack Library=/opt/FJSVawjbk/jdk14/jre/lib/sparc/fjvm/libjvm.so 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/jdk14/bin/java 0xff370000 /usr/lib/libthread.so.1 0xff3fa000 /usr/lib/libdl.so.1 〜〜〜〜〜〜〜 略 〜〜〜〜〜〜〜 0xbef70000 /lib/libgen.so.1 0xbd6b0000 /lib/libextpiswu.so 0xbef50000 /opt/FJSVawjbk/jdk14/jre/lib/sparc/libioser12.so Local Time = Thu Aug 14 16:09:01 2004 Elapsed Time = 9885
注意:
Error IDとして出力されている値は、Java VMが内部処理矛盾を自己検出した場合に出力する内部情報コードです。SIGSEGVやSIGBUSなどOSが検出した異常の場合には、常に同じ値(4F530E435050****)が出力されます.そのためError IDの先頭が「4F530E435050」で始まるコードの場合は、通常、意味を持ちません。Error IDの先頭が「4F530E435050」以外で始まるコードの場合には、障害情報検索時や判断時のキーワード情報としての意味を持ちます。
# # HotSpot Virtual Machine Error : SIGSEGV # Error ID : 4F530E4350500305 (share.vm.runtime.os.cpp, 773) [ Patched ] # Please report this error to FUJITSU # # Java VM: Java HotSpot(TM) Server VM (1.4.2_FUJITSU_MODIFIED-B** mixed mode) # >>>> Start of VM status report
(2)異常終了時のシグナルハンドラ情報(Solaris版/Linux版)
異常終了時のシグナルハンドラに関する情報が確認できます。
本例では、すべて「(in VM)」表示なので、シグナルハンドラの登録変更に関する問題はありません。
##>> Signal Handlers VM signal handler[1]=0xfe1ec0a0, VM signal handler[2]=0xfe4ff780, SIG_DFL=0x0, SIG_IGN=0x1, INT_SIG=(16,16), ASYNC_SIG=(17,17) SIGSEGV :signal handler=0xfe4ff780 (in VM *) SIGPIPE :signal handler=0xfe1ec0a0 (in VM) SIGBUS :signal handler=0xfe1ec0a0 (in VM) SIGILL :signal handler=0xfe1ec0a0 (in VM) SIGFPE :signal handler=0xfe1ec0a0 (in VM) INTERRUPT_SIGNAL :signal handler=0xfe4ff010 (in VM +) ASYNC_SIGNAL :signal handler=0xfe1ec0a0 (in VM)
(3)異常終了時のJavaヒープ領域に関する情報
異常終了時のJavaヒープ領域に関する情報が確認できます。
FJVM 1.4.2の場合:
「split eden generation」が「New世代領域」、
「tenured generation」が「Old世代領域」、
「compacting perm gen」が「Permanent世代領域」
に関する情報です。FJVM 1.3.1の場合:
「new generation」が「New世代領域」、
「tenured generation」が「Old世代領域」、
「permanent generation」が「Permanent世代領域」
に関する情報です。
本例の場合、異常終了時点における「New世代領域」+「Old世代領域」の領域(-Xmxで最大量が指定される領域)には、空きがあることが判ります。
また「Permanent世代領域」に対しても、余裕があることが判ります。注意:
各情報内にパーセント表示の値がありますが、その値は異常終了した時点でFJVMが確保しているメモリ量に対する比率であり、利用可能な上限値に対する比率ではありません。K(キロ)単位で表示されているメモリ使用量の値と、オプションで指定された値(デフォルト値を含む)とを比較して判断してください。
##>> Heap split eden generation total 113728K, used 75256K [0xc0800000, 0xc7710000, 0xd5d50000) eden1 space 56832K, 32% used [0xc3f90000, 0xc517e048, 0xc7710000) eden2 space 56896K, 100% used [0xc0800000, 0xc3f90000, 0xc3f90000) tenured generation total 113920K, used 56905K [0xd5d50000, 0xdcc90000, 0xf5cd0000) the space 113920K, 49% used [0xd5d50000, 0xd94e24c0, 0xd94e2600, 0xdcc90000) compacting perm gen total 16384K, used 3658K [0xf5cd0000, 0xf6cd0000, 0xf9cd0000) the space 16384K, 22% used [0xf5cd0000, 0xf6062a10, 0xf6062c00, 0xf6cd0000] (-Xms=3584K, -Xmx=524288K, -XX:PermSize=16384K, -XX:MaxPermSize=65536K)
目次
索引
![]() ![]() |