现象
- 生产环境遭用户反馈功能无法使用
排查流程
服务健康确认
- nacos服务列表存在该服务
- 服务器上查看对应进程存活(ps -ef|grep)
- 服务日志输出异常(OOM)
具体原因追踪
-
服务器资源确认(top)。发现问题服务占用CPU400%
-
查看服务GC是否正常(jstat -gcutil {PID} 300)。FGC和FGCT巨高
-
内存转储快照排查(jmap -dump:format=b,file=dump.hprof {PID})。使用MAT定位到问题对象(Histogram==>按照Retained Heap倒序排序)、问题代码(左下方Leak Suspects报告中定位问题代码)
-
如图一个对象占用800M空间。
-
Shallow Heap 对象自身不包含引用的大小(bytes),Retained Heap 对象自身包含引用的大小(bytes)
处理方案
- 调整相关逻辑
验证
- 相同时间内,该对象的空间占用情况(jmap -histo {pid} > heap_dump + grep “对象全类名” heap_dump),优化后代码比优化前代码降低三分之二