专栏原创出处: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 文件进行分析,或者使用一些可视化故障处理工具