【问题标题】:Active memory consumption by kubernetes pod with java app (not OutOfMemoryException)kubernetes pod 与 java 应用程序的活动内存消耗(不是 OutOfMemoryException)
【发布时间】: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


【解决方案1】:

您已经解决了大部分常见问题......也许是直接缓冲区??

众所周知,在某些情况下,直接缓冲区可能会无限增长,从而导致内存泄漏。

https://www.evanjones.ca/java-bytebuffer-leak.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多