Red Hat OpenJDK 11.0.10+9下Mongo连接触发JVM double free崩溃及ClientEncryption问题
问题场景与环境
- 运行环境:Red Hat OpenJDK 11.0.10+9(Red Hat发行版OpenJDK Runtime Environment 11.0.10+9-LTS),部署于Azure Kubernetes Pod
- 技术栈:Spring Boot 搭配Spring Data JPA
- 当前遇到两个强关联技术问题:
- Mongo ClientEncryption 组件不支持单例使用模式,疑似原生内存管理逻辑存在设计缺陷
- JVM间歇性致命崩溃:Pod正常运行12-13小时、经历应用空闲期后,首次发起Mongo数据库连接时触发崩溃;持续全量负载运行时无故障复现,初步怀疑和上述ClientEncryption组件的原生内存问题直接相关
崩溃现场报错
free(): double free detected in tcache 2 Java Runtime Environment检测到致命错误: SIGSEGV (0xb) at pc=0x00007f3e214fbd21, pid=1, tid=91 JRE版本:OpenJDK Runtime Environment 18.9 (11.0.10+9) (build 11.0.10+9-LTS) Java VM:OpenJDK 64-Bit Server VM 18.9 (11.0.10+9-LTS, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64) 问题帧: C [libc.so.6+0x21d21] abort+0x203 核心转储将写入默认位置:核心转储可通过"/usr/share/apport/apport %p %s %c %d %P %E"处理(或写入/home/jboss/core.1) 更详细的错误报告文件已保存至:/home/jboss/hs_err_pid1.log 日志附带对应发行版的错误提交指引
关键定位信息:崩溃发生在Java虚拟机外部的原生代码层,可通过故障帧快速锁定问题组件范围。
触发链路日志
崩溃前完整应用日志片段:
2021-05-05 07:36:29.512 DEBUG 1 --- [nio-8090-exec-1] c.xxx.xx.xx.SectionHandlerService [db340496-d1fb-43f0-92c9-f7114194dfbf] : questionnaire extracted with Id :: 4308655 2021-05-05 07:36:29.512 DEBUG 1 --- [nio-8090-exec-1] com.xxx.utils.MapperUtil [db340496-d1fb-43f0-92c9-f7114194dfbf] : mapToModel Started 2021-05-05 07:36:29.512 DEBUG 1 --- [nio-8090-exec-1] com.xxx.utils.MapperUtil [db340496-d1fb-43f0-92c9-f7114194dfbf] : Converting com.xxx.xxx.entity.Section To com.xxx.xxxxx.SectionModel class using mapToModel 2021-05-05 07:36:29.623 INFO 1 --- [nio-8090-exec-1] org.mongodb.driver.connection [db340496-d1fb-43f0-92c9-f7114194dfbf] : Opened connection [connectionId{localValue:266, serverValue:267840}] to xxxxxxxxxxxxxx:27017
日志验证:Mongo驱动输出“连接打开”的日志后,应用立即触发JVM崩溃,无后续Java层异常输出。
故障核心特征
- 复现条件固定:应用持续满载运行时无崩溃;空闲超过12小时后,首次发起Mongo连接即触发故障
- 崩溃触发动作和Mongo连接打开逻辑强绑定
- 故障类型为原生内存错误(double free、段错误),不属于Java层可捕获、可处理的异常范畴
内容的提问来源于stack exchange,提问作者Pratik Bhajankar
相关产品推荐
相关产品推荐

