虽然对于oom尤其是线上oom这样的问题大家都唯恐避之不及,但是既然遇到了,也不妨当做是提升自己的一次机会。
背景:生产应用从上午开始陆续开始报出cms老年代的使用率超过95%的告警
从图上可以看到在短短的一个钟内老年代频繁地进行gc,内存高点一直在100%左右徘徊。
定位过程:
1、第一反应是先咨询了运维同事,发现监控平台上并没有集成内存分析的工具,需要自行dump分析。
2、dump命令通过jmap工具来执行,需要提供当前java进程的pid,于是先登录到虚拟机,通过jps命令找到当前服务器的java进程号。然后通过命令 jmap -dump:format=b,file=filename pid 来对当前java进程执行内存dump
3、dump操作对于线上oom的处理来说只是分析问题的第一步,拿到dump文件后需要考虑如何进行内存分析,这里当时尝试了两个软件,java本身自带了一个jvisualvm工具,这个工具除了能对jvm运行情况做实时监控以外也能对dump下来的文件进行分析。还有另一个是比较有名的外部软件 mat&#