【发布时间】:2021-10-16 01:32:10
【问题描述】:
我有一个在 kubernetes pod 中运行的 java 应用程序,其基础映像为 openjdk:11。 由于内存耗尽,该 pod 每 3-4 天重新启动一次。日志中没有 OutOfMemoryException,日志中没有关于内存错误或应用程序终止的任何内容。我只知道 pod 以代码 143 终止(表示容器收到 SIGTERM 失败)。 我在生产环境中使用 Java Flight Recorder 并在本地机器上使用 VisualVM 进行了分析,但对任何异常情况一无所知。 GC 运行良好,堆被清除,元空间没有增长,线程没有增加。但是 pod 中的内存正在增长,并随着 pod 的重新启动而结束。 我用 grafana 监控那个 pod,然后看下一个:
Pod 使用下一个参数启动:requests.memory=2000Mi 和 limits.memory=2600Mi
Java 选择:-Xmx1300M -XX:CompressedClassSpaceSize=32M -XX:MaxMetaspaceSize=256M -XX:ReservedCodeCacheSize=128M -Xverify:none -Dspring.jmx.enabled=false -Djava.security.egd=file:/dev/ ./urandom -XX:+AlwaysActAsServerClassMachine -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions
也许有人会引导我走上正确的道路。谢谢!
【问题讨论】:
-
你可以看看here;但是您可以查询操作系统并找出它被杀死的原因
-
由于内存限制(可能),您的 pod 已终止。这是设计使然。
-
关于内存消耗增加,唯一的办法就是分析你的应用程序。
-
是pod终止还是容器重启?
-
容器重启并保持同名
标签: java kubernetes out-of-memory