线上OOM问题排查记录

379 阅读1分钟

生产环境的java应用服务故障,排查日志发现OOM报错。 以下介绍排查过程的记录:

检查系统环境

  • 查看服务进程, CPU等使用情况

    top
    
  • 查看内存占用情况

    free -m
    
  • 查看磁盘容量(正常不会发生问题)

    df -h
    

检查应用状态

  • 查看java应用进程

    ps -ef|grep java
    
  • 查看内存占用情况

    jmap -heap 进程号
    

    30E085354AE1BA5C80905BAE564B2873.png

  • 查看具体占用情况

     jmap -histo 进程号
    
  • 生成内存快照

    将内存快照文件输出到/data/logs

    jmap -dump:live,format=b,file=/data/logs/dump.hprof 进程号
    

分析内存快照文件

使用 MemoryAnalyzer 工具打开上面的 dump.hprof 文件, 可以看到如下类似效果。

E66C9B85FBAA07DC3C7C841D8FEC231D.png

常见的原因

  • 程序启动时配置的堆内存参数过小,修改启动参数即可
  • 代码逻辑有问题,没有释放内存,造成内存泄漏,需要修改代码