核心转储发生在Java本机方法中

核心转储发生在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

我的项目是一个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) (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文件”。