背景:线上一个项目线上3节点POD,内存一点点爬升最后100%打满,然后就会触发K8s的驱逐机制,重启。然后内存又是一点点的爬升周而复始,系统完全不可用。
先看线上系统POD上的内存CPU使用情形,如下图所示:
线上内存几乎打满,这个时候使用jmap会触发内存回收。
下面是容器里的内存信息:
从图中可见Java占的内存已经是6.0G。
下面来看Java的堆内存,元空间和堆外内存信息,我们需要算清楚java内存。
Java内存=4.8G堆内存+0.4G元空间+0.73G非堆内存=6.0G内存
但是后来java 内存增加到6.9G,为了解决问题先我们先dump下测试环境的内存:
# jmap -dump:format=b,file=./heap202200901955.hprof 7