核心转储发生在Java本机方法中
我的项目是一个spring boot项目,在K8s pod中运行。遇到错误,这是日志文件的标题:核心转储发生在Java本机方法中,java,c,core,dump,Java,C,Core,Dump,我的项目是一个spring boot项目,在K8s pod中运行。遇到错误,这是日志文件的标题: # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007f116f6b1be1, pid=516, tid=0x00007f10795ef700 # # JRE version: OpenJDK Runtime Environment (8.0_121-b13
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f116f6b1be1, pid=516, tid=0x00007f10795ef700
#
# JRE version: OpenJDK Runtime Environment (8.0_121-b13) (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
# Java VM: OpenJDK 64-Bit Server VM
# Problematic frame:
# C [libc.so.6+0x95bd3] strchrnul+0x23
#
# Core dump written. Default location: /projects/core.dump
然后我尝试获取core.dump文件,它的大小是5G。我的项目通过.so文件调用C本机方法,该文件不包括方法main
,因此我无法编译以获取.exe
或.out
。尝试以下方法后,我不知道如何分析转储文件:
gdb [exe file] [core file](can get the exe file)
gdb java core.dump
jmap -dump:format=b,file=./2842.hprof $JAVA_HOME/bin/java core.dump
如何分析core.dump文件以找到问题?如果您在Windows中,则可以使用WinDbg轻松调试转储文件。您可以尝试WinDbg预览-我正在使用它调试Java核心转储。 你可以在这里下载 然后运行
!分析-v
作为您的第一个命令,您将获得许多有用的信息。我有40克的垃圾,所以5克就可以了。
当然,您必须选择正确的线程,例如,这里是我的线程java.exe中的堆栈!主要
:
Hi~我的转储文件是由linux系统生成的。我可以在windows中分析linux转储吗?它与系统有关吗?当然可以。Windbg将以OSNAME:Linux的形式处理它。但是,如果您想继续使用GDB,当然可以使用GDB进行分析。只需运行
gdb/opt/jdk-14/bin/java core.693
也许您需要提供可执行java的完整工作路径,也许这就是您所做的错误。谢谢~我将尝试您的方法看看会发生什么。嗨~我安装了Windbg Preview并运行!analyze-v
,但它似乎没有显示崩溃消息。我只是打开转储文件并运行!分析-v
。还有什么我应该做的吗?对不起,应该是“无法获取exe文件”而不是“可以获取exe文件”。