在两台服务器上使用 docker 部署了相同的服务
基础镜像是 openjdk:17-oracle, 容器限制了 2G 内存
容器内运行了 springboot, JAVA_OPTS 设置为 -Xms512m -Xmx1536m
容器运行一段时间后, 被系统 oom killer, 被 kill 前观测到容器使用内存接近 2G. 进入容器用 top 命令查看, java 占用内存和容器使用内存保持一致, 都是接近 2G
两个容器均发生此现象

在排除 jvm heap 内存泄漏后. 做了如下调整
JAVA_OPTS 设置为 -Xms750m -Xmx750m -XX:MaxDirectMemorySize=750m, 进入容器查看 NMT 数据如下




现在的问题是
1. 为什么两个容器实际使用的内存不一样, 但是 NMT 的数据几乎一致
2. 如何定位和解决现在 java 内存一直在增长并造成 oom killer 的问题

谢谢
举报· 316 次点击
登录 注册 站外分享
2 条回复  
FaustY 小成 5 天前
之前遇到过类似的,换了 oracle jdk 的容器就好了
FaustY 小成 5 天前
自己打基础镜像或者用 bitnami/java
返回顶部