背景:线上一个项目线上3节点POD,内存一点点爬升最后100%打满,然后就会触发K8s的驱逐机制,重启。然后内存又是一点点的爬升周而复始,系统完全不可用。
先看线上系统POD上的内存CPU使用情形,如下图所示:

线上内存几乎打满,这个时候使用jmap会触发内存回收。
下面是容器里的内存信息:

从图中可见Java占的内存已经是6.0G。
下面来看Java的堆内存,元空间和堆外内存信息,我们需要算清楚java内存。

Java内存=4.8G堆内存+0.4G元空间+0.73G非堆内存&
线上项目POD内存持续爬升导致系统不可用,通过jmap和MAT分析发现大对象导致内存泄露。优化代码后,问题依旧存在。观察网络流量和IO操作,发现大量文件处理。使用vmstat、jmap、NMT等工具深入分析,发现堆外内存未被FGC释放,可能涉及文件缓冲区。通过pmap和gdb进一步排查内存泄露。
背景:线上一个项目线上3节点POD,内存一点点爬升最后100%打满,然后就会触发K8s的驱逐机制,重启。然后内存又是一点点的爬升周而复始,系统完全不可用。
先看线上系统POD上的内存CPU使用情形,如下图所示:

线上内存几乎打满,这个时候使用jmap会触发内存回收。
下面是容器里的内存信息:

从图中可见Java占的内存已经是6.0G。
下面来看Java的堆内存,元空间和堆外内存信息,我们需要算清楚java内存。

Java内存=4.8G堆内存+0.4G元空间+0.73G非堆内存&
3057
3343

被折叠的 条评论
为什么被折叠?