Centos7 上的 JVM 崩溃
JVM crash on Centos7
我是 运行 centos7 上的码头服务器,它不断崩溃并出现以下错误
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fdd323ee698, pid=79411, tid=0x00007fd05bdfd700
#
# JRE version: OpenJDK Runtime Environment (8.0_222-b10) (build 1.8.0_222-8u222-b10-1~14.04-b10)
# Java VM: OpenJDK 64-Bit Server VM (25.222-b10 mixed mode linux-amd64 )
# Problematic frame:
# V [libjvm.so+0x653698]
#
# 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 visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x00007fd044001800): JavaThread "cron4j::scheduler[875ca3d006f7a65e29bf90fc0000016fc6274c4c6286cd54]::executor[875ca3d006f7a65e293583000000016fc678c0816e4418c5]" [_thread_in_vm, id=93353, stack(0x00007fd05bcfd000,0x00007fd05bdfe000)]
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000
Stack: [0x00007fd05bcfd000,0x00007fd05bdfe000], sp=0x00007fd05bdfc4b0, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x653698]
C [libbCacheService.so+0x2068c] JNIEnv_::GetObjectClass(_jobject*)+0x2e
C [libbCacheService.so+0x1f400] Java_com_applictaion_test_CacheService_buildCache+0x111
j com.application.test.CacheService.buildCache([Lcom/application/test/db/CacheJNI;)V+0
相同的代码在 ubuntu 上运行良好。但是,它在 Centos 7 上一直失败。
我有
gcc --version
gcc (GCC) 9.2.0
java-1.8.0-openjdk-amd64 and jre1.8.0_65 same issue with both the JRE versions
Further more I use -XX:+UseParallelGC for GC.
如您所见,问题出在 libjvm.so JVM 环境,而不是应用程序问题。
此外,Ubuntu 上的相同设置和代码工作正常,知道 Centos 7 发生了什么吗?
谢谢
拉吉
As one can see the issue is from libjvm.so JVM environment and not an application problem
否:问题最有可能出现在 libbCacheService.so
,而不是 libjvm.so
。我不知道libbCacheService.so
的出处是什么,但是鉴于google是我搜索的时候才发现这个问题,我怀疑是你申请的
Besides, the same setup and code on Ubuntu works fine
这种情况很常见:表现出未定义行为的应用程序在一个系统上运行 "fine",但在另一个系统上崩溃。
您的第一步应该是使用调试信息构建 libbCacheService.so
,启用核心转储,并从核心检查从 JNIEnv_::GetObjectClass()
调用的任何 libjvm.so
函数是否使用正确的参数调用.
P.S。看起来(来自 si_addr
)libjvm.so
解引用了一个 NULL 指针。可能是因为您将 NULL 指针作为参数之一传递给它。
我是 运行 centos7 上的码头服务器,它不断崩溃并出现以下错误
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fdd323ee698, pid=79411, tid=0x00007fd05bdfd700
#
# JRE version: OpenJDK Runtime Environment (8.0_222-b10) (build 1.8.0_222-8u222-b10-1~14.04-b10)
# Java VM: OpenJDK 64-Bit Server VM (25.222-b10 mixed mode linux-amd64 )
# Problematic frame:
# V [libjvm.so+0x653698]
#
# 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 visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x00007fd044001800): JavaThread "cron4j::scheduler[875ca3d006f7a65e29bf90fc0000016fc6274c4c6286cd54]::executor[875ca3d006f7a65e293583000000016fc678c0816e4418c5]" [_thread_in_vm, id=93353, stack(0x00007fd05bcfd000,0x00007fd05bdfe000)]
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000
Stack: [0x00007fd05bcfd000,0x00007fd05bdfe000], sp=0x00007fd05bdfc4b0, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x653698]
C [libbCacheService.so+0x2068c] JNIEnv_::GetObjectClass(_jobject*)+0x2e
C [libbCacheService.so+0x1f400] Java_com_applictaion_test_CacheService_buildCache+0x111
j com.application.test.CacheService.buildCache([Lcom/application/test/db/CacheJNI;)V+0
相同的代码在 ubuntu 上运行良好。但是,它在 Centos 7 上一直失败。
我有
gcc --version
gcc (GCC) 9.2.0
java-1.8.0-openjdk-amd64 and jre1.8.0_65 same issue with both the JRE versions
Further more I use -XX:+UseParallelGC for GC.
如您所见,问题出在 libjvm.so JVM 环境,而不是应用程序问题。 此外,Ubuntu 上的相同设置和代码工作正常,知道 Centos 7 发生了什么吗?
谢谢
拉吉
As one can see the issue is from libjvm.so JVM environment and not an application problem
否:问题最有可能出现在 libbCacheService.so
,而不是 libjvm.so
。我不知道libbCacheService.so
的出处是什么,但是鉴于google是我搜索的时候才发现这个问题,我怀疑是你申请的
Besides, the same setup and code on Ubuntu works fine
这种情况很常见:表现出未定义行为的应用程序在一个系统上运行 "fine",但在另一个系统上崩溃。
您的第一步应该是使用调试信息构建 libbCacheService.so
,启用核心转储,并从核心检查从 JNIEnv_::GetObjectClass()
调用的任何 libjvm.so
函数是否使用正确的参数调用.
P.S。看起来(来自 si_addr
)libjvm.so
解引用了一个 NULL 指针。可能是因为您将 NULL 指针作为参数之一传递给它。