问题描述
服务部署到线上以后隔一段时间就无法访问了,后台日志提示:java.lang.OutOfMemoryError: GC overhead limit exceeded,初步判断为内存泄露;下一步就是获取堆栈信息进行分析;
1.使用jmap生成dump文件
jmap -dump:format=b,file=[FILE_NAME].dump [PID]
- FILE_NAME: 文件名
- PID 线程ID
2.使用kill -3 PID 获取堆栈信息
- 获取进程的PID
ps -ef|grep java
- 获取堆栈信息
kill -3 PID
- 获取文件
1> 如果项目通过Tomcat进行发布(普通的web项目),则对应的堆栈信息会打印在catalina.out文件中。
2> 如果项目是基于SpringBoot并且使用nohup java -jar xxx.jar & 命令运行,则java堆栈信息会在jar包所在的nohup.out文件中。
3.分析日志
将dump文件导入VisualVm中分析,文件 => 装入 即可分析