java - 如何知道 JVM 因 Segfault 崩溃的原因?

标签 java segmentation-fault ignite jvm-crash redhat-openjdk

我们发现 JVM 有时会因段错误而崩溃。我们在日志中看到的唯一错误如下。

任何人都可以通过查看下面的错误跟踪来提出建议。

<小时/>
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fef7f1d3eb0, pid=42623, tid=0x00007feea62c8700
#
# JRE version: OpenJDK Runtime Environment (8.0_222-b10) (build 1.8.0_222-b10)
# Java VM: OpenJDK 64-Bit Server VM (25.222-b10 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# J 62683 C2 org.apache.ignite.internal.marshaller.optimized.OptimizedObjectOutputStream.writeObject0(Ljava/lang/Object;)V (331 bytes) @ 0x00007fef7f1d3eb0 [0x00007fef7f1d3e00+0xb0]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /tmp/hsperfdata_pvappuser/hs_err_pid42623.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
<小时/>

在尝试了解此崩溃的原因时,Oracle JVM 文档 https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/crashes001.html ,这看起来是 5.1.2 编译代码崩溃的情况,因为有问题的框架是 java 框架(有一个“J”)

虽然无法进一步了解它,但我们也不确定它何时到来,唯一可能的模式是当 JVM 运行 5-6 天时,通常是在周五。 我们使用在 RHEL 6.10 上运行的 RedHat 提供的 openjdk-8(“1.8.0_232”)发行版。

期待找到追踪此错误的任何线索。

最佳答案

当前堆栈帧将 writeObject0 作为最后调用的方法。有一个命名约定,native 方法的名称以 0 结尾。因此,请检查该方法是否确实是 native 的。

如果是的话,它可能是用 C 语言编写的,这是一种古老的不安全语言,其程序往往会以不受控制的方式崩溃。这通常会导致 SIGSEGV。

在本例中,该方法是用 Java 编写的。

正如错误消息中告诉您的那样,请阅读 hs_err_pid42623.log 以获取更多详细信息。在该文件中,您将找到崩溃代码周围的寄存器和一些机器指令。

关于java - 如何知道 JVM 因 Segfault 崩溃的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59835460/

相关文章:

java - 两个相同的程序,只有一个可以编译(java7)

c++ - 为什么在极少数情况下 pthread_exit() 在 pthread_detach() 之后调用时会导致 SEGV?

java - 如何使用 CacheConfiguration.setIndexedTypes 进行 Ignite 缓存

java - 扫描仪类别错误

Java,提供HLS直播视频流

java - 如何在 Intellij Idea 中优化 Web 应用程序中的 css 和/或其他资源修改?

c - 段错误 11 - 网络程序

c - 检索 PID 时 pclose 随机出现段错误

java - 由于 Apache Ignite 中的节点故障,连接被对等方重置

c++ - 从 Ignite 读取 Cassandra 的 Blob