Java JVM 故障诊断-高内存占用 OOM定位

专栏原创出处:github-源笔记文件 github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。

Java JVM-虚拟机专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java JVM-虚拟机

排查过程

  • 执行 jps -l 命令,定位高内存占用的 PID
jps -l
1174 org.elasticsearch.bootstrap.Elasticsearch
  • 执行 jmap -histo:live PID 命令查看存活对象
jmap -histo:live 1174
 num     #instances         #bytes  class name (module)
-------------------------------------------------------
   1:          7570         503328  [B ([email protected])
   2:          6987         167688  java.lang.String ([email protected])
   3:          1224         150344  java.lang.Class ([email protected])
   4:          3825         122400  java.util.HashMap$Node ([email protected])
   
... 更多内容未粘贴   
  • 执行 jmap -dump:live,format=b,file=test.dump PID 将存活对象转换为 dump 文件进行离线分析

dump 文件太大时请注意,为了保证 dump 的信息是可靠的,所以会暂停应用程序。对于 dump 文件分析推荐使用 jprofiler 工具进行分析。

如果 jmap 添加了 :live 参数后,JVM 会先触发 gc,然后再统计信息。

扩展

内存区域占用情况分析可使用 jstat 命令进行分析

比如:执行 jstat -gcutil -t -h 5 PID 500 10 查看各内存区域占用情况

jstat -gcutil -t -h 5 1174 500 10
Timestamp         S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
         1138.7   0.00 100.00  25.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1139.2   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1139.8   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1140.3   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1140.8   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
Timestamp         S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
         1141.3   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1141.8   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1142.3   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1142.8   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131
         1143.3   0.00 100.00  50.00  22.32  94.42  85.09     29    0.064     4    0.067    0.131

说明

更多 JDK 相关命令详细用法可参考 Java JVM JDK13 诊断命令处理工具 jps,jstat,jinfo,jmap,jstack,jcmd

高 CPU 占用分析可参考本专栏《故障诊断-高 CPU 占用》

实际生产过程中我们可以使用 dump 文件进行分析,或者使用一些可视化故障处理工具

发布了224 篇原创文章 · 获赞 54 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/u011278496/article/details/103894558