没有任何命名库的本机 JVM SIGSEGV 崩溃

JVM SIGSEGV crash in native without any named library

我们现在在 Oracle 1.8 中遇到了两次 SIGSEGV 崩溃。0_60 JVM 错误日志甚至没有涉及任何库,只是说崩溃发生在本机代码中:

# Problematic frame:
# C  0x00007f6d04000000
#

# Problematic frame:
# C  0x00007fc6ec048ff0
#

两次崩溃的线程都是应用程序线程。 ForkJoinPool 或 Tomcat ajp-bio 线程。

可能出了什么问题?通常,当本机库出现故障时,会包含库的名称。 我在 sanitized hs_err-logs for the first crash and the second crash (full version for comparison) 中看到的内容并没有给我更多关于可能出错的想法,因为似乎有足够的内存。只是元空间甚至接近运行。

环境在 64 位上运行Linux:

[foo@bar ~]$ uname -a
Linux bar 2.6.32-504.16.2.el6.x86_64 #1 SMP Wed Apr 22 06:48:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

您只发布了一个完整的日志,因此实际上不可能在此处发现模式,但 C 框架位于不可执行的内存区域并且在代码之外 space。 VM 事件还显示了一系列 re/deoptimizations 和偏差撤销。所以我猜这可能是编译错误。

您可以尝试的事情:

  1. 更新您的 JVM。 8.0_60-b27 不是最新的补丁级别。
  2. 尝试-XX:-UseBiasedLocking -XX:-TieredCompilation
  3. 尝试-XX:-UseBiasedLocking -XX:TieredStopAtLevel=1

如果更新 vm 没有解决问题,但其中一个选项可以解决,那么它可能是 VM 错误,您应该使用 linux 发行版或 oracle 进行归档。