工具: arthas + jprofile + mat
分析过程:首先是查看cup占用,发现cpu占用并不高 于是用arthas查看应用内cpu占用率,如下图所示,最高cpu为VM Thread 这个线程,是jdk的类使用的线程占用应用内存高,此处并不能看出主要问题
于是去查看GC,看是否频繁触发GC,但一直刷新发现GC并未异常。
于是Jmap -dump下内存快照,然后用JProfile进行分析, 可见最大对象为hibernate的二级缓存,但是占用也不高,
于是用mat进行分析,查看可疑点,如下图
大致意思就是jdbc连接有异常,于是百度查看hibernate.queryplancache这个发方法,查到类似问题的解决方案如下。
附件为当时的jstack
jstack.zip (294 KB) jstack.zip |