Javaアプリケーションの異常終了がJNI(Java Native Interface)経由のネイティブプログラム側の問題かどうか、判断する方法はありますか?

Interstage Application Serverの技術情報はこちら

Javaアプリケーションの異常終了がJNI(Java Native Interface)経由のネイティブプログラム側の問題かどうか、判断する方法はありますか?
Java VMの異常終了時に、javaのカレントフォルダまたはカレントディレクトリにhs_err_pid***.logやfjvm_pid***.log(***はプロセスid)といったログファイルを出力します。このログファイル中で、以下の例のように、異常終了箇所に関する情報が確認できます。ただし、異常終了の種類によっては、以下の例のような異常終了箇所が示されない場合もあります。

例1:

Unexpected Signal : SIGSEGV occurred at PC=0x8B469DC0
Function name=appfunc1
Library=/app1/lib/libapp1.so

Current Java thread:
 at app1.APP1.app1_method1(Native Method)
 at app1.APP1.app1_method2(APP1.java:132)
    :

この例では、「Library」として出力されている利用者作成ネイティブライブラリlibapp1.soのappfunc1関数の近くで、SIGSEGV(メモリアクセスで不正なセグメントを参照)が発生しています。この場合は、利用者側作成のJNI処理の問題である可能性が高いため、利用者側での調査が必要です。


例2:

Unexpected Signal : SIGSEGV occurred at PC=0xFB9D52A4
Function name=JVM_IHashCode
Library=/opt/FJSVawjbk/jdk8/jre/lib/amd64/fjvm/libjvm.so

Current Java thread:
 at app2.APP2.app2_method1(Native Method)
 at app2.APP2.app2_method2(APP2.java:405)
     :

この例では、「Library」として出力されているJava VM(libjvm.so)のJVM_IHashCode関数の近くで、SIGSEGV(メモリアクセスで不正なセグメントを参照)が発生しています。本例の場合、Java VM内で異常が発生していると判断しますが、異常発生時のスタックトレース情報(「Current Java thread」)では、app2.APP2.app2_method1の延長で不正なアクセスが発生しているため、ネイティブメソッドapp2.APP2.app2_method1で不正なアクセスを招きそうな箇所がないか、調査する必要があります。

製品・サービス区分 Interstage
製品・サービス情報
対象製品 Interstage Application Server
バージョンV13, V12, V11
プラットフォーム Windows, Solaris, Linux
アンサー種別 運用/保守
このページの先頭へ