一、案例
某日,收到告警“KK服务器JVM内存使用超过90%”。
二、问题
为什么KK服务器JVM内存使用超过90%?
三、数据收集与分析
3.1 收集当前JVM内存使用率
- jstat -gccapacity <进程号> 2s
- or
- jmap -heap <进程号>
除了现场收集外,也可以配置到监控平台上收集告警。
3.2 生成JVM 内存的dump文件
- jmap -dump:live,format=b,file=/path/file.dump [pid]
3.3 分析JVM内存的dump文件
- 使用ibm heapanalyzer工具进行分析
在reference里看到,java/lang/Thread方法占用98.75%的内存,进一步展开,就可以看到一个char[]的类型,在右手边看到CHAR[]详细内容:PROMOTION xxxx IS NO AVALIABLE. 怀疑出现应用代码无法处理的数据。
四、行动
- 联系开发员检查代码
- 重启使用该JVM的应用服务,恢复正常。
五、结论
基于JVM运行的服务,一定要熟悉JVM的运行机制及常用诊断工具和方法。