11 致命的エラー・レポート
致命的なエラーとは、ネイティブ・メモリーの枯渇、メモリー・アクセス・エラー、またはプロセスに向けられた明示的なシグナルなどのエラーのことです。致命的なエラーは、アプリケーション内のネイティブ・コード(たとえば、開発者によって記述されたJava Native Interface (JNI)コードなど)、アプリケーションやJVMで使用するサードパーティのネイティブ・ライブラリ、またはJVM内のネイティブ・コードによってトリガーされます。致命的なエラーが原因でJVMをホストしているプロセスが終了すると、JVMはエラーに関する情報を収集し、クラッシュ・レポートを書込みます。
JVMは、エラーの性質と場所を特定しようと試みます。可能な場合、JVMはクラッシュ時のJVMとプロセスの状態に関する詳細な情報を書込みます。入手できる詳細は、プラットフォームおよびクラッシュの性質によって異なります。このエラー・レポート・メカニズムよって提供される情報を使用すると、アプリケーションのデバッグやサードパーティ・コードの問題の特定をより簡単に、効率よく行うことができます。エラー・メッセージからJVMコードの問題がわかれば、より正確で有用なバグ・レポートを提出できます。場合によっては、クラッシュ・レポートの生成によって、詳細なレポート生成を阻害する二次的なエラーが発生することがあります。
エラー・レポートの例
次の例は、アプリケーションのネイティブJNIコードのクラッシュに関するエラー・レポート(hs_err_pid18240.log
ファイル)の冒頭を示しています。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f0f159f857d, pid=18240, tid=18245
#
# JRE version: Java(TM) SE Runtime Environment (9.0+167) (build 9-ea+167)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (9-ea+167, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C [libMyApp.so+0x57d] Java_MyApp_readData+0x11
#
# Core dump will be written. Default location: /cores/core.18240)
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- S U M M A R Y ------------
Command Line: MyApp
Host: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz, 24 cores, 141G, Ubuntu 12.04 LTS
Time: Fri Apr 28 02:57:13 2017 EDT elapsed time: 2 seconds (0d 0h 0m 2s)
--------------- T H R E A D ---------------
Current thread (0x00007f102c013000): JavaThread "main" [_thread_in_native, id=18245, stack(0x00007f10345c0000,0x00007f10346c0000)]
Stack: [0x00007f10345c0000,0x00007f10346c0000], sp=0x00007f10346be930, free space=1018k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libMyApp.so+0x57d] Java_MyApp_readData+0x11
j MyApp.readData()I+0
j MyApp.main([Ljava/lang/String;)V+15
v ~StubRoutines::call_stub
V [libjvm.so+0x839eea] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, Thread*)+0x47a
V [libjvm.so+0x896fcf] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*) [clone .isra.90]+0x21f
V [libjvm.so+0x8a7f1e] jni_CallStaticVoidMethod+0x14e
C [libjli.so+0x4142] JavaMain+0x812
C [libpthread.so.0+0x7e9a] start_thread+0xda
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j MyApp.readData()I+0
j MyApp.main([Ljava/lang/String;)V+15
v ~StubRoutines::call_stub
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000