42回复
1年前
【已结算】jvm堆内堆外都正常,但是k8s Pod占用内存一直缓慢增长
1.问题描述:
通过grafana和arthas工具发现,服务jvm堆内(ps eden space,ps survivor space,ps old gen)占用和堆外(code cache,metaspace,compressed class space,direct,mapped)占用都正常,但是k8s Pod占用内存一直缓慢增长,知道达到limit, 服务被kill,然后重启该服务。
2.环境说明:
jvm:-Xms512m -Xmx512m
k8s: limit是1024m
jdk: 1.8
3.尝试过的解决办法
3.1怀疑是k8s缓存内存占用导致
排查资料得到可能是cache导致,故咨询运维 buffer cache = wss - rss, 通过grafana 检测发现wss rss基本保持,相差不大
3.2怀疑是jvm GC后没有归还内存给操作系统
线上是java8 默认是 -XX:+UseParallelGC = Parallel Scavenge + Parallel Old
但是xms 和 xmx 是同一个值,不存在申请和释放的问题,而且通过观察发现和Pod内存占用高关系不大
3.3怀疑是缺少jvm参数XX:MaxDirectMemorySize
通过监控观察,加了参数还是 进程内存还是缓慢增长
3.4按照网上排查堆外内存泄漏的方式排查
https://zhuanlan.zhihu.com/p/60976273
但是没有大量的64M内存占用,而且代码没有涉及到的Zip相关操作
4.提问
有什么解决办法或者解决思路嘛
5969 阅读