1:新建一个SpringBoot项目
2:访问 localhost:8080/add
3:进到控制台执行 top 命令
- 此时CPU已经达到了734.4%,CPU达到这么高要么就是有死循环,要么就是FGC次数太频繁
4:执行 jstat -gc 5385 1000
-
每1s打印一次GC信息,这个程序才启动了几秒钟的时间,但是FGC已经有8次了,说明平均每1s就会发生一次FGC,这么多的 FULL GC,应该是内存泄漏没跑了
5:保存堆信息
- 执行 jmap -dump:format=b,file=heap.log pid (pid就是java程序的pid)
- 在当前目录下会有一个heap.log文件,重命名为heap.hprof
6:分析文件
- 下载jprofile
- 右键heap.hprof,用jprofile打开
7:分析结果
-
可以看到com.coco.model.User这个类占用了大量的内存,引起内存泄漏的根源就是他了
-
选择最大对象,我们可以看到具体引发内存泄漏的位置在哪