1.查看内存占用过高的进程PID
top -c
2.查看内存中存活对象的统计,找出业务相关的类名
jmap -histo:live PID > xxx.log
3.上面简单的统计信息还是没法定位问题类的话,就输出内存明细来分析,下面的命令会输出内存中所有的信息,输出的文件大小和内存大小基本一致,而且会导致内存暂时挂起,谨慎使用。
jmap -dump:live,format=b,file=xxx.hprof PID
4.对dump下来的文件进行分析,文件大小不是很大的话,使用jdk自带的jhat命令即可,输入命令:jhat -J-mx2G -port 7170,该命令可以查看内存占用的对象。
如果文件太大,可以下载到本地使用jdk自带的 jvisualvm 工具进行分析。下面详细讲怎么使用jvisualvm定位内存占用问题。