Java

JVM 因分段錯誤而崩潰

  • December 17, 2013

我們有一個 tomcat 伺服器集群,剛剛升級到 debian7/openjdk7/tomcat7(全部來自庫存 debian)。現在我們在不同的機器上發生了兩次 JVM 崩潰。兩台伺服器具有相同的硬體並且配置完全相同(當然除了 IP 地址)

第一次崩潰:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fd0b582123a, pid=6542, tid=140533723084544
#
# JRE version: 7.0_25-b30
# Java VM: OpenJDK 64-Bit Server VM (23.7-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x62623a]  LinkResolver::runtime_resolve_interface_method(CallInfo&, methodHandle, KlassHandle, Handle, KlassHandle, bool, Thread*)+0x5a
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   http://icedtea.classpath.org/bugzilla
#

---------------  T H R E A D  ---------------

Current thread (0x00007fd0948b0800):  JavaThread "catalina30" daemon [_thread_in_vm, id=6670, stack(0x00007fd08e94b000,0x00007fd08ea4c000)]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000000

第二次崩潰:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f0a3a22421d, pid=3454, tid=139681826494208
#
# JRE version: 7.0_25-b30
# Java VM: OpenJDK 64-Bit Server VM (23.7-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x71021d]  ParRootScanWithBarrierTwoGensClosure::do_oop(unsigned int*)+0x6d
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   http://icedtea.classpath.org/bugzilla
#

---------------  T H R E A D  ---------------

Current thread (0x000000000088c000):  GCTaskThread [stack: 0x0000000000000000,0x0000000000000000] [id=3781]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000018

我們以前從未發生過任何 JVM 崩潰。

我真的不知道從哪裡開始。它看起來像硬體故障嗎?JDK錯誤?雄貓蟲?

最可能的原因是什麼?

我的 RAM 存在問題。我們在伺服器中有新的 RAM,現在一切正常。之後我測試了 OracleJDK 和 OpenJDK,我看不出性能或功能有任何差異。Oracle JDK 中唯一缺少的是完整的密碼學。所以從現在開始我更喜歡 OpenJDK。

引用自:https://serverfault.com/questions/560862