【JMeter性能测试】内存溢出及定位

1.简介

内存溢出

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。

内存泄漏

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。memory leak会最终会导致out of memory!

2.内存溢出的现象

1.tps出现大幅波动,并慢慢降低,甚至降为0,响应时间随之波动,慢慢升高
2.通过jstat命令看到,Jvm中Old区不断增加,FullGC非常频繁,对应的FullGC消耗的时间也不断增加
3.通过jconsole/jvisualvm可以看到,堆内存曲线不断上升,接近上限时,变成一条直线
4.日志报错java.lang.OutOfMemoryError: Java heap space
内存逐步上升

TPS降低,最后为0

3.内存溢出的定位方法

1,通过jmap命令:jmap -histo pid | head -20,查看当前堆内存中实例数和占用内存最多的前20 个对象
2,通过jvisualvm,进行远程堆dump,然后把dump文件下载下来,用jvisualvm打开进行分析,可
以看到更直观的jvm中对象的信息

4.查看JVM运行状态的常用命令

a.监控jvm的GC情况

# 先查看进程号
ps -ef|grep java
# 监控GC情况
jstat -gcutil pid 1000  100

b.查看堆配置信息

# 查看java进程的堆配置信息,各区的空间大小和配置信息
jmap -head pid

c. 查看jvm中类和对象的占用情况

jmap -histo pid | head -20 

d.堆文件dump

# 对堆内存进行dump,以文件的形式进行保存下来
jmap -dump:format=b,file=文件名.hdump  pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值