You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s中Java应用调用C++原生库崩溃时Core Dump未生成问题

K8s中Java服务调用原生库崩溃后未生成Core Dump问题

我的Java服务运行在K8s集群中,依赖C++编写的原生库。已通过命令echo "/nfs/core_dumps/core.%t.%p" | tee /proc/sys/kernel/core_pattern将Core Dump输出路径设置到持久化挂载的NFS目录。但当调用原生方法触发SIGSEGV信号崩溃时,日志显示会在/nfs/core_dumps路径生成Core Dump文件,实际却未生成。Pod重启后进入容器shell查看NFS目录,找不到对应的Core文件,相关报错日志如下:

报错日志(中文翻译)

#
# Java运行时环境检测到致命错误:
#
#  SIGSEGV (0xb) 信号触发于 pc=0x00007efde450e688,进程ID=1,线程ID=103
#
# JRE版本:OpenJDK Runtime Environment Temurin-17.0.13+11 (17.0.13+11) (build 17.0.13+11)
# Java虚拟机:OpenJDK 64位服务器版 Temurin-17.0.13+11 (17.0.13+11,混合模式,分层编译,压缩指针,压缩类指针,G1垃圾收集器,linux-amd64)
# 问题栈帧:
# C  [lib.Converter.so.1.0+0xee688]  SetConverterMode+0xc8
#
# Core转储将被写入。默认路径:/nfs/core_dumps/core.%t.1
#
# JFR记录文件将被写入。路径://hs_err_pid1.jfr
#
# 包含详细信息的错误报告已保存至:
# /nfs/my-folder/core_dump_%t.log
#
# 若要提交bug报告,请参考所使用JDK的官方支持渠道
# 崩溃发生在Java虚拟机之外的原生代码中。
# 请查看问题栈帧以确定bug报告的提交对象。
#

[错误报告过程中出现异常(), id 0xb, SIGSEGV (0xb) 信号触发于 pc=0x00007eff17d249a2]

排查与解决方向

  • 检查NFS目录权限:确认容器内运行Java进程(pid=1)对/nfs/core_dumps目录拥有读写权限。可在Pod正常运行时进入容器,执行touch /nfs/core_dumps/test_file测试,若失败需调整NFS目录权限或Pod的securityContext配置。
  • 确保core_pattern配置持久化:K8s容器内修改/proc/sys/kernel/core_pattern仅对当前会话有效,Pod重启后会丢失。需将该配置命令加入Pod的启动脚本(如entrypoint.sh),保证每次容器启动时自动执行。
  • 检查Core文件大小限制:执行ulimit -c查看当前进程的Core文件大小限制,若值为0则无法生成Core Dump。需在Pod的securityContext中设置resources.limits.core为unlimited,或在启动脚本中添加ulimit -c unlimited命令。
  • 排查错误报告阶段二次崩溃:日志末尾显示“错误报告过程中出现异常”,说明JVM在尝试生成Core Dump或错误日志时再次触发SIGSEGV。这可能是原生库崩溃导致进程状态不稳定,无法完成文件写入。可先排查原生库SetConverterMode函数的内存问题,修复崩溃根源后再验证Core Dump生成情况。
  • 验证NFS挂载稳定性:检查NFS服务器运行状态,确认Pod与NFS服务器之间的网络无丢包或中断。可在容器内执行mount命令查看NFS挂载状态,或写入其他文件测试NFS可用性。

内容的提问来源于stack exchange,提问作者Lokesh P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:18:15