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_addrlibjvm.so 解引用了一个 NULL 指针。可能是因为您将 NULL 指针作为参数之一传递给它。