jmeter5.4.3在linux上压测8小时后生成报告出现java.lang.OutOfMemoryError异常及解决方法

1. 问题背景

项目中需要对服务程序进行比较长时间的压力测试,在经过8小时的压力测试后,开始生成报告的时候,突然出现了java.lang.OutOfMemoryError。控制台输出如下:

summary +   1336 in 00:00:34 =   39.2/s Avg:   262 Min:    46 Max:   770 Err:     0 (0.00%) Active: 1 Started: 50 Finished: 49
summary = 5219870 in 08:00:27 =  181.1/s Avg:   264 Min:    33 Max:  7204 Err:     0 (0.00%)
summary = 5219870 in 08:00:27 =  181.1/s Avg:   264 Min:    33 Max:  7204 Err:     0 (0.00%)
Tidying up ...    @ Wed May 18 02:12:04 CST 2022 (1652811124103)
Uncaught Exception java.lang.OutOfMemoryError: Java heap space in thread Thread[StandardJMeterEngine,5,main]. See log file for details.

从输出信息可以看出,压力测试已经完成,也就是jtl文件已经生成,只是在根据jtl文件生成web测试报告的时候出现了内存溢出。重新执行根据jtl文件生成web报告。

./jmeter -g ./test208-8.jtl -o ./result208-8

这里根据test208-8.jtl文件,生成报告在result208-8目录下。

仍然出现内存溢出,怀疑jmeter的内存设置小了。

2. 修改jmeter内存大小

在jmeter文件中找到如下位置:

# This is the base heap size -- you may increase or decrease it to fit your
# system's memory availability:
: "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"

修改为如下:

# This is the base heap size -- you may increase or decrease it to fit your
# system's memory availability:
: "${HEAP:="-Xms2g -Xmx4g -XX:MaxMetaspaceSize=256m"}"

继续执行报告转换,仍然出现内存溢出错误,继续加大内存配置如下: 

# This is the base heap size -- you may increase or decrease it to fit your
# system's memory availability:
: "${HEAP:="-Xms4g -Xmx6g -XX:MaxMetaspaceSize=256m"}"

3. 重新执行转换

./jmeter -g ./test208-8.jtl -o ./result208-8

启动jmeter后,可以查看堆内存分配:

# jmap -heap 14773
Attaching to process ID 14773, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09

using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 6442450944 (6144.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 3865051136 (3686.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 260046848 (248.0MB)
   MaxMetaspaceSize         = 268435456 (256.0MB)
   G1HeapRegionSize         = 2097152 (2.0MB)

Heap Usage:
G1 Heap:
   regions  = 3072
   capacity = 6442450944 (6144.0MB)
   used     = 3205496888 (3057.0000534057617MB)
   free     = 3236954056 (3086.9999465942383MB)
   49.755860244234405% used
G1 Young Generation:
Eden Space:
   regions  = 1198
   capacity = 2642411520 (2520.0MB)
   used     = 2512388096 (2396.0MB)
   free     = 130023424 (124.0MB)
   95.07936507936508% used
Survivor Space:
   regions  = 30
   capacity = 62914560 (60.0MB)
   used     = 62914560 (60.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 304
   capacity = 1589641216 (1516.0MB)
   used     = 630194232 (601.0000534057617MB)
   free     = 959446984 (914.9999465942383MB)
   39.643802995103016% used

9942 interned Strings occupying 730264 bytes.

可以看到堆内存修改生效了。 

这次执行报告转换成功了。

后来查看jtl文件,文件大小2GB,已经是挺大的文件了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值