使用命令及工具简介
top, linux自带,查看当前最占资源的进程jmap,jdk自带堆内存工具jstat,查看GC情况arthas,阿里开源JVM性能分析工具visualvm,开源JVM分析工具jprofiler,商业JVM分析工具
排查思路及过程
从整体到部分,逐步确认问题所在
监控看到的问题往往是最宏观的,所以首先可以从监控看起。通过监控面板, 查看主机或容器CPU、内存、连接数, 查看数据库连接数等信息。
此时看到机器的**CPU使用率100%,内存使用率90%**,其它指标比较正常,那么大概率是程序问题。
排查过程
最开始,业务开发希望协助使用arthas帮助寻找到底是什么方法比较慢。
- arthas查看全局情况

发现占用CPU较高的全是GC线程,此时就应该进一步查看GC的情况,而非具体跟踪某一个方法了。
- jmap -heap pid 查看堆内存

发现老年代数据无法GC掉,占用20G+内存,使用率99%
- jstat- gcutil pid 1000 10 查看GC情况

发现每分钟一次FullGC,且无法将老年代内存清理。
此时可以确定是程序问题,怀疑某处内存泄漏,导致GC无法清除数据。
- jmap -heap:live pid 查看堆内存中占用最多的类

发现几乎都是QuizExaminne类,业务开发此时应该分析产生的代码和原因了。
- heapdump下载堆转储文件,可以使用visualvm,MAT,JProfiler等进一步分析方法引用,此处不再展示。