提问者:小点点

Kubernetes pod与java应用程序的活动内存消耗(不是OutOfMemoryException)


我有一个在kubernetes pod中运行的java应用程序,基本图像为openjdk: 11。并且该pod每3-4天重新启动一次,因为内存耗尽。日志中没有OutOfMemoryException,日志中没有任何关于内存错误或应用程序终止的内容。我只知道pod以代码143终止(表示容器收到SIGTERM时失败)。我在生产中使用JavaFlight Recorder进行了分析,在本地机器上使用VisualVM,没有任何关于任何异常的事实。GC运行良好,堆被清除,metaspace没有增长,线程没有增加。但pod中的内存正在增长,并以pod的重新启动结束。我用grafana监控该pod,并看到下一步:

Pod从下一个参数开始:请求.内存=2000Mi和限制.内存=2600Mi

Java选项:-Xmx1300M-XX:CompressedClassSpaceSize=32M-XX:MaxMetaspaceSize=256M-XX:ReservedCodeCacheSize=128M-X验证:无-Dprint. jmx.启用=false-Djava.security.egd=file:/dev/./urandom-XX:AlwaysActAsServerClassMachine-XX:UseG1GC-XX:Unlock实验VMOptions

也许有人会指引我正确的方向。谢谢!


共1个答案

匿名用户

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

众所周知,在某些情况下,直接缓冲区可能会无限期增长,有效地充当内存泄漏。

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