java - Centos7 上 JVM 崩溃

标签 java segmentation-fault centos7 jvm-crash jnienv

我在 centos7 上运行 jetty 服务器,它不断崩溃并出现以下错误

 # 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 的来源是什么,但考虑到谷歌只有在我搜索它时才发现这个问题,我怀疑这是你的应用程序。

Besides, the same setup and code on Ubuntu works fine

这种情况很常见:表现出未定义行为的应用程序在一个系统上运行“正常”,但在另一个系统上崩溃。

您的第一步应该是使用调试信息构建 libbCacheService.so,启用核心转储,并从核心检查是否从 调用了任何 libjvm.so 函数>JNIEnv_::GetObjectClass() 使用正确的参数调用。

附注看起来(从 si_addr),libjvm.so 取消引用了 NULL 指针。可能是因为您将 NULL 指针作为参数之一传递给它。

关于java - Centos7 上 JVM 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59849540/

相关文章:

c - 有时在 C 中修复段错误

c++ - 从 OpenMP 线程调用时,OpenGL 调用段错误

c++ - setter 导致段错误

java - 输入 : localhost:8080 or ip:8080 Centos7 vm 时 tomcat 启动但未显示在浏览器中

java - 与 Struts2 的 web.xml 文件混淆

java - 将一些字节的十六进制字符串表示转换成Java中的字节数组

java Spark 1.6 csv 文件

java - 如何使用泛型实现比较器?

postgresql - 我可以在 SELinux 中使用 .pgpass 吗? [centos7, pgagent_96, postgresql 9.6.5]

mysql - 如何从 CentOS 7 完全卸载 MariaDB 5.5(包括配置)