日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 转储快照分析_分析Java核心转储

發布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 转储快照分析_分析Java核心转储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 轉儲快照分析

在本文中,我將向您展示如何調試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 pc=0x0000002b1d00075c, pid=21178, tid=1076017504 # # 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.so+0x75c] bar+0x10 #

還有一個堆棧跟蹤:

Stack: [0x000000004012b000,0x000000004022c000], sp=0x000000004022aac0, free space=3fe0000000000000018k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [libnativelib.so+0x75c] bar+0x10 C [libnativelib.so+0x772] foo+0xe C [libnativelib.so+0x78e] Java_CoreDumper_core+0x1a j CoreDumper.core()V+0 j CoreDumper.main([Ljava/lang/String;)V+7 v ~StubRoutines::call_stub V [libjvm.so+0x3e756d]

堆棧跟蹤顯示我的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) @bci=0 (Interpreted frame)- java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=118 (Interpreted frame)- java.lang.ref.ReferenceQueue.remove() @bci=2, line=134 (Interpreted frame)- java.lang.ref.Finalizer$FinalizerThread.run() @bci=3, line=159 (Interpreted frame)Thread 16786: (state = BLOCKED)- java.lang.Object.wait(long) @bci=0 (Interpreted frame)- java.lang.Object.wait() @bci=2, line=485 (Interpreted frame)- java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=116 (Interpreted frame)Thread 16780: (state = IN_NATIVE)- CoreDumper.core() @bci=0 (Interpreted frame)- CoreDumper.main(java.lang.String[]) @bci=7, line=12 (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核心轉儲

參考:從我們的JCG合作伙伴 Fahd Shariff的fahd.blog博客分析Java核心轉儲 。

翻譯自: https://www.javacodegeeks.com/2013/02/analysing-a-java-core-dump.html

java 轉儲快照分析

總結

以上是生活随笔為你收集整理的java 转储快照分析_分析Java核心转储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。