1.首先通过top命令查看,通过 shift + m 做一个排序,查到进程号是23762
2.将堆得转存文件导出来
[zhupengfei@devops-rocky84-shanghai-area1 ~]$ jmap -dump:format=b,file=heap.hprof 23762 # jmap 跟二进制格式 + 文件名字 + pid
3.分析堆得文件
[zhupengfei@devops-rocky84-shanghai-area1 ~]$ sz heap.hprof # 下载到本地用 Ecliipse Memory Analyer 工具进行分析,简称MAT
打开之后会展示泄lou的怀疑报告,通过这个报告可以看到:
The class "com.ponfey.task.Task",loaded by
"org.springfamework.boot.loader.LaunchedURLClassLoader @ 0xe121eld8",
occuples 471,883,048(98.03%)bytes.The menmory is accumulated in one instance of
"Java.lang.Object[]",loaded by"<system class loader>",which occuples 471,883,048(98.03%)bytes.
...
spingboot 用了这个类加载器去加载,占了98.03%的内存,内存累计在"Java.lang.Object[]"实例里面,这些内存的使用是堆积在这个里面的,通过系统类加载器去加载的,可能这个类里面有问题。
生产不建议使用jmap,非常占用内存。