Javaアプリケーションの異常終了がJNI(Java Native Interface)経由のネイティブプログラム側の問題かどうか、判断する方法はありますか?
Interstage Application Serverのよくあるご質問を検索できます。
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 アンサー種別 運用/保守