生产环境的java应用服务故障,排查日志发现OOM报错。 以下介绍排查过程的记录:
检查系统环境
-
查看服务进程, CPU等使用情况
top -
查看内存占用情况
free -m -
查看磁盘容量(正常不会发生问题)
df -h
检查应用状态
-
查看java应用进程
ps -ef|grep java -
查看内存占用情况
jmap -heap 进程号 -
查看具体占用情况
jmap -histo 进程号 -
生成内存快照
将内存快照文件输出到/data/logs
jmap -dump:live,format=b,file=/data/logs/dump.hprof 进程号
分析内存快照文件
使用 MemoryAnalyzer 工具打开上面的 dump.hprof 文件,
可以看到如下类似效果。
常见的原因
- 程序启动时配置的堆内存参数过小,修改启动参数即可
- 代码逻辑有问题,没有释放内存,造成内存泄漏,需要修改代码