使用jmeter执行性能测试,报错:java.lang.OutOfMemoryError: Java heap space
需要对jmeter的jvm进行调优。记录如下:
1. 问题记录及分析:
使用jmeter执行性能测试,某场景150并发时,出现报错。日志如下:
Creating summariser <summary>
Created the tree successfully using script/项目.jmx
Starting standalone test @ Wed Feb 22 20:36:29 CST 2023 (1677069389986)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4447
summary + 1 in 00:00:01 = 0.7/s Avg: 1049 Min: 1049 Max: 1049 Err: 0 (0.00%) Active: 150 Started: 150 Finished: 0
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid25798.hprof ...
Heap dump file created [898948073 bytes in 1.583 secs]
2. 问题分析
利用jmeter在性能测试中模拟并发压测,有时候当模拟并发请求较大或者脚本运行时间较长时,压力机会出现卡顿甚至报异常——内存溢出。
如果内存溢出的话,一般会出现这个提示:java.lang.OutOfMemoryError: Java heap space:意思就是堆内存溢出,不够用了。
内存溢出解决方法:调整堆内存大小。
3. JVM调优
在使用Jmeter做性能测试过程中,可能会因为默认设置的堆内存值较小出现堆内存溢出问题,此时解决的方式有两种,分布式测试和调大堆内存。下面介绍官方推荐调整堆内存方法
官方文档地址:https://jmeter.apache.org/usermanual/get-started.html
3.1 官方介绍:
翻译如下:
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
3.2 创建setenv.bat或setenv.sh文件
setenv.bat、setenv.sh的优先级高于jmeter.bat、jmeter.sh中的jvm参数,会覆盖该文件的jvm参数内容。
Xms、Xmx建议设为物理内存的一半。
注:① setenv.bat、setenv.sh脚本文件语法格式稍有区别。window解析bat文件使用set语法设置变量,linux解析shell语言使用export设置变量。
② 堆的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整时候其本身会占用很多内存)
3.2.1 windows环境
在bin目录创建setenv.bat文件,设置jvm参数
set HEAP=-Xms6G -Xmx6G -XX:MaxMetaspaceSize=256m
3.2.2 Linux环境
在bin目录创建setenv.sh文件,设置jvm参数
export HEAP="-Xms6G -Xmx6G -XX:MaxMetaspaceSize=256m"
4. 展示
在bin目录创建以上文件后,重启jmeter,再次执行压测。
内存溢出问题解决。
PS:当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了,这种修改堆大小的方法只适用一部分情况,并不是万能的!
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】