一 现象

告警系统发出接口波动告警,JVM监控显示内存回收不掉,长时间不重启服务应用卡顿

二 产生原因

大文件读取、全局集合对象、数据库select没有where导致全表数据写入内存等等

三 排查分析

命令行

#1、通过top找对使用CPU最高的进程:top

#2、找对进程中占用CPU最高的线程:top -p [进程ID]H

#3、将线程号转换成16进制:printf '%x' [线程ID]

#4、通过jstack命令找到线程的堆栈:jstack [进程ID]|grep -A 12 [16进制的线程ID]

MAT工具【Eclipse 官网下载就能用】

主要是用查看Leak Suspects下的Shallow heap下的对象