记录最近两次java内存过高的分析
2023-04-12
背景
最近出现java程序突然挂了的情况,查看日志发现是内存突然暴增导致,于是使用jmap和jstack分析。
jmap分析java内存使用
-histo 查看对象列表
jmap -histo 1234 查找进程号为1234的java程序的jvm堆中对象详细占用情况,我们一般加上head -20查看前20的占用。
jmap -histo 1234|head -20
-heap 查看堆详情
jmap -heap 1234 查看进程号为1234的Java程序的整个jvm内存状态
java程序CPU占用过高问题排查
ps -mp pid -o THREAD,tid,time
printf “%x\n” number
生成 heap dump 文件
经过以上操作没有分析出来,那就只能dump heap 文件进行分析了
jmap -dump:live,format=b,file=heap.hprof 2075605
MAT内存分析
内存分析指MAT,即memory analysis tool,通常使用eclipse提供的MemoryAnalyzer的工具包解析dump文件。

具体分析步骤
# 找到出现问题的程序
ps -ef|grep java
# 查看特定程序的线程情况
top -p 2075605 -H
# 线程详情, nid 特定线程的16进制ID
jstack 2075605 | grep -A 100 nid=0x1fabd9
# 堆详情
jmap -heap 2075605
# 对象列表
jmap -histo 2075605
# 经过以上操作没有分析出来,那就只能dump heap 文件进行分析了
# 生成 heap dump 文件
jmap -dump:live,format=b,file=heap.hprof 2075605
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com



