信创环境麒麟系统ky10运行openjdk,进程频繁崩溃该如何解决? | java | java 技术论坛-江南app体育官方入口

a系统内核:4.19.90-25.19.v2101.ky10.aarch64
java版本:openjdk runtime enviroment bisheng (build 1.8.0_292-b10)
前提:java代码在windows开发环境能正常稳定运行,并且在压测压力下没有崩溃过。
问题:在信创环境运行java进程,频繁遇到进程崩溃问题,在服务压力小时也偶尔崩溃,服务压力大时频繁崩溃。并且无法稳定复现,有时几分钟就崩溃了,有时好几天才崩溃一次。
崩溃日志:

#
# a fatal error has been detected by the java runtime environment:
#
#  sigsegv (0xb) at pc=0x0000fffd8c020d28, pid=171524, tid=0x0000fffcf17bf1e0
#
# jre version: openjdk runtime environment (8.0_292-b10) (build 1.8.0_292-b10)
# java vm: openjdk 64-bit server vm (25.292-b10 mixed mode linux-aarch64 compressed oops)
# problematic frame:
# j  sun.nio.ch.ioutil.read(ljava/io/filedescriptor;ljava/nio/bytebuffer;jlsun/nio/ch/nativedispatcher;)i1
#
# core dump written. default location: /home/rmms/core or core.171524
#
# if you would like to submit a bug report, please visit:
#   https://gitee.com/src-openeuler/openjdk-1.8.0/issues/
#
---------------  t h r e a d  ---------------
current thread (0x0000fffcfc029800):  javathread "reactor-http-nio-4" daemon [_thread_in_java, id=171941, stack(0x0000fffcf15c0000,0x0000fffcf17c0000)]
siginfo: si_signo: 11 (sigsegv), si_code: 1 (segv_maperr), si_addr: 0x000000077b1784c0

期望解决:能通过什么方式排查进程崩溃的原因?并且由于生产环境原因,如果是兼容问题,需要出示问题分析报告才能升级jdk,所以未尝试使用新版本openjdk进行测试。

ps:目前观察所有的崩溃日志,导致崩溃的原因各种各样,有nio线程导致的,有gc线程导致的,甚至有线程执行currenthashmap.get()方法导致的,不过各种原因导致的崩溃,signinfo中的si_signo都是sigsegv

讨论数量: 7

你的openjdk是麒麟系统ky10提供的吗

3个月前
(楼主) 3个月前
加了sugar (作者) 3个月前
加了sugar (作者) 3个月前

从你提供的崩溃日志来看,崩溃的原因是发生了sigsegv(信号11),这通常表示发生了段错误(segmentation fault),即程序试图访问它没有权限访问的内存区域。具体到这个崩溃日志,有几个关键信息点:

  1. 崩溃位置 :

    j sun.nio.ch.ioutil.read(ljava/io/filedescriptor;ljava/nio/bytebuffer;jlsun/nio/ch/nativedispatcher;)i 1

    这表明崩溃发生在sun.nio.ch.ioutil.read方法中,这是java nio包中用于底层i/o操作的一个方法。这通常与文件i/o操作有关。

  2. 崩溃信号 :

    siginfo: si_signo: 11 (sigsegv), si_code: 1 (segv_maperr), si_addr: 0x000000077b1784c0

    si_code: 1 (segv_maperr) 表示访问了无效的内存地址,si_addr给出了出错时试图访问的内存地址。

  3. 线程信息 :

    current thread (0x0000fffcfc029800): javathread "reactor-http-nio-4" daemon [_thread_in_java, id=171941, stack(0x0000fffcf15c0000,0x0000fffcf17c0000)]

    这表明崩溃发生在名为reactor-http-nio-4的线程中,这是一个与netty的http nio事件循环相关的线程。 可能的原因分析:

  • 文件i/o操作错误 :可能在进行文件读取操作时,试图访问了未被正确映射或已经关闭的文件描述符。

  • 资源泄露 :长时间运行的程序如果没有正确管理资源(如文件描述符),可能会导致资源泄露,最终导致无法访问某些内存区域。

  • 第三方库问题 :由于崩溃发生在netty的http nio事件循环线程中,可能是netty库的某个版本与当前jdk版本存在兼容性问题。 解决建议:

  • 检查代码 :审查涉及文件i/o操作的代码,确保所有资源(如文件描述符)在使用完毕后都被正确关闭。

  • 资源管理 :确保程序中对资源的管理是正确的,特别是对于长时间运行的程序,要避免资源泄露。

  • 更新和测试 :如果可能,尝试更新netty库到最新版本,并在开发或测试环境中进行压力测试,以查看问题是否仍然存在。

  • 查看netty文档和社区 :查看netty的官方文档和社区,看是否有其他用户报告了类似的问题,并寻找可能的江南app体育官方入口的解决方案。

由于崩溃发生在特定的线程和方法中,这可能需要对代码和使用的库进行深入的审查和测试。

3个月前
deatil 3个月前
(楼主) 3个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图