东莞英文网站制作,wordpress 文章居中,网站 html5,网站建设中的网页布局主要内容在本文中#xff0c;我将向您展示如何调试Java核心文件#xff0c;以查看导致JVM崩溃的原因。 我将使用在上一篇文章#xff1a; 生成Java Core Dump中生成的核心文件。 您可以通过以下几种方法来诊断JVM崩溃#xff1a; hs_err_pid日志文件 当JVM中发生致命错误时#x… 在本文中我将向您展示如何调试Java核心文件以查看导致JVM崩溃的原因。 我将使用在上一篇文章 生成Java Core Dump中生成的核心文件。 您可以通过以下几种方法来诊断JVM崩溃 hs_err_pid日志文件 当JVM中发生致命错误时它会在进程的工作目录或操作系统的临时目录中生成一个名为hs_err_pidXXXX.log的错误日志文件。 该文件的顶部包含崩溃的原因和“问题框架”。 例如我的节目显示 $ head hs_err_pid21178.log
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc0x0000002b1d00075c, pid21178, tid1076017504
#
# JRE version: 6.0_21-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64 )
# Problematic frame:
# C [libnativelib.so0x75c] bar0x10
# 还有一个堆栈跟踪 Stack: [0x000000004012b000,0x000000004022c000], sp0x000000004022aac0, free space3fe0000000000000018k
Native frames: (Jcompiled Java code, jinterpreted, VvVM code, Cnative code)
C [libnativelib.so0x75c] bar0x10
C [libnativelib.so0x772] foo0xe
C [libnativelib.so0x78e] Java_CoreDumper_core0x1a
j CoreDumper.core()V0
j CoreDumper.main([Ljava/lang/String;)V7
v ~StubRoutines::call_stub
V [libjvm.so0x3e756d] 堆栈跟踪显示我的Java方法CoreDumper.core()调用到JNI中并在用本机代码调用bar函数时死亡。 调试Java核心转储 在某些情况下例如如果本机代码通过调用abort函数突然中止则JVM可能不会生成hs_err_pid文件。 在这种情况下我们需要分析产生的核心文件。 在我的机器上操作系统将核心文件写到/var/tmp/cores 。 您可以使用以下命令来查看系统配置为将核心文件写到的位置 $ cat /proc/sys/kernel/core_pattern
/var/tmp/cores/%e.%p.%u.core
$ ls /var/tmp/cores
java.21178.146385.core 有几种不同的方法可以查看核心转储 1.使用gdb GNU调试器gdb可以检查核心文件并确定程序崩溃时正在做什么。 $ gdb $JAVA_HOME/bin/java /var/tmp/cores/java.14015.146385.core
(gdb) where
#0 0x0000002a959bd26d in raise () from /lib64/tls/libc.so.6
#1 0x0000002a959bea6e in abort () from /lib64/tls/libc.so.6
#2 0x0000002b1cecf799 in bar () from libnativelib.so
#3 0x0000002b1cecf7a7 in foo () from libnativelib.so
#4 0x0000002b1cecf7c3 in Java_CoreDumper_core () from libnativelib.so
#5 0x0000002a971aac88 in ?? ()
#6 0x0000000040113800 in ?? ()
#7 0x0000002a9719fa42 in ?? ()
#8 0x000000004022ab10 in ?? ()
#9 0x0000002a9a4d5488 in ?? ()
#10 0x000000004022ab70 in ?? ()
#11 0x0000002a9a4d59c8 in ?? ()
#12 0x0000000000000000 in ?? () where命令打印堆栈帧并显示导致崩溃的bar函数abort() 。 2.使用jstack jstack为给定的核心文件打印Java线程的堆栈跟踪。 $ jstack -J-d64 $JAVA_HOME/bin/java /var/tmp/cores/java.14015.146385.core
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
Deadlock Detection:No deadlocks found.Thread 16788: (state BLOCKED)Thread 16787: (state BLOCKED)- java.lang.Object.wait(long) bci0 (Interpreted frame)- java.lang.ref.ReferenceQueue.remove(long) bci44, line118 (Interpreted frame)- java.lang.ref.ReferenceQueue.remove() bci2, line134 (Interpreted frame)- java.lang.ref.Finalizer$FinalizerThread.run() bci3, line159 (Interpreted frame)Thread 16786: (state BLOCKED)- java.lang.Object.wait(long) bci0 (Interpreted frame)- java.lang.Object.wait() bci2, line485 (Interpreted frame)- java.lang.ref.Reference$ReferenceHandler.run() bci46, line116 (Interpreted frame)Thread 16780: (state IN_NATIVE)- CoreDumper.core() bci0 (Interpreted frame)- CoreDumper.main(java.lang.String[]) bci7, line12 (Interpreted frame)3.使用jmap jmap检查核心文件并打印出共享对象内存映射或堆内存详细信息。 $ jmap -J-d64 $JAVA_HOME/bin/java /var/tmp/cores/java.14015.146385.core
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
0x0000000040000000 49K /usr/sunjdk/1.6.0_21/bin/java
0x0000002a9566c000 124K /lib64/tls/libpthread.so.0
0x0000002a95782000 47K /usr/sunjdk/1.6.0_21/jre/lib/amd64/jli/libjli.so
0x0000002a9588c000 16K /lib64/libdl.so.2
0x0000002a9598f000 1593K /lib64/tls/libc.so.6
0x0000002a95556000 110K /lib64/ld-linux-x86-64.so.2
0x0000002a95bca000 11443K /usr/sunjdk/1.6.0_21/jre/lib/amd64/server/libjvm.so
0x0000002a96699000 625K /lib64/tls/libm.so.6
0x0000002a9681f000 56K /lib64/tls/librt.so.1
0x0000002a96939000 65K /usr/sunjdk/1.6.0_21/jre/lib/amd64/libverify.so
0x0000002a96a48000 228K /usr/sunjdk/1.6.0_21/jre/lib/amd64/libjava.so
0x0000002a96b9e000 109K /lib64/libnsl.so.1
0x0000002a96cb6000 54K /usr/sunjdk/1.6.0_21/jre/lib/amd64/native_threads/libhpi.so
0x0000002a96de8000 57K /lib64/libnss_files.so.2
0x0000002a96ef4000 551K /lib64/libnss_db.so.2
0x0000002a97086000 89K /usr/sunjdk/1.6.0_21/jre/lib/amd64/libzip.so
0x0000002b1cecf000 6K /home/sharfah/tmp/jni/libnativelib.so有用的链接 JVM崩溃分析崩溃课程 生成Java核心转储 参考在fahd.blog博客中分析了我们JCG合作伙伴 Fahd Shariff 的Java Core Dump 。 翻译自: https://www.javacodegeeks.com/2013/02/analysing-a-java-core-dump.html