性能测试过程中jmap堆信息的方法

本文探讨了性能测试中常见的内存错误,如年老代、永久代内存不足及GC时间过长等问题,并详细介绍了如何使用jmap命令获取堆快照,分析对象大小、数量及其对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在性能测试过程中,有时候会发现内存溢出,fullgc等问题,一般都是通过jvm的jmap命令获取堆快照来分析:那些对象大,那些对象多,那些对象影响了性能等;
常见的内存错误有如下三种:

outOfMemoryError 年老代内存不足。
outOfMemoryError:PermGen Space 永久代内存不足。
outOfMemoryError:GC overhead limit exceed 垃圾回收时间占用系统运行时间的98%或以上。

下面是获取dump的方法:
第一步:先使用命令查询到java的主进程(pid):
ps -ef|grep java(tomcat)
在这里插入图片描述
如果liunx下安装了多个jdk,那么选哟到tomcat服务使用的jdk的bin下执行命令:

/xxx/app/tools/java/jdk1.7.0_21/bin/jmap -heap pid  #展示pid的整体堆信息

/xxx/app/tools/java/jdk1.7.0_21/bin/jmap -histo pid  #展示class的内存情况

/xxx/app/tools/java/jdk1.7.0_21/bin/jmap -histo:live pid  #展示heap中所有对象的情况,
  #这个命令执行,jvm先触发gc,然后统计信息,
  
/xxx/app/tools/java/jdk1.7.0_21/bin/jmap -histo:live pid >m.log #将所有的对象的情况保存在文件中,
 #过一段时间再次执行,可以对比到gc回收了那些对象;
 
/xxx/app/tools/java/jdk1.7.0_21/bin/jmap -dump:live,format=b,file=w.log pid #将内存信息dump到文件中,
#这个命令会将整个heap中所有的信息dump,如果heap较大,那么这个过程特别耗时,一般不用。

在执行这些命令的时候,必须是在压力进行的过程中,如果没有访问,会没有什么结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值