【并发压测中jmeter内存泄露导致闪退的问题处理】

文章描述了一次在使用JMeter进行压力测试时遇到的内存无法分配问题,导致JMeter闪退。通过分析和调整JMeter的内存配置、排查接口脚本,尤其是发现一个GET请求接口的参数传递方式可能导致内存消耗过大,最终通过改变参数传递方式解决了问题。同时,强调了在编写压测脚本时应考虑内存消耗和资源管理,以及遇到崩溃时如何利用日志进行故障排查。
摘要由CSDN通过智能技术生成

jmeter内存泄露导致闪退的问题处理

问题描述:

在压测过程中偶然遇到了一次压力机jmeter内存无法分配(cannot allocate memory)的问题,重复压测内存问题仍是无法解决,后进行一些分析判断后逐步定位到问题所在,以记录下来,以便后续查阅复盘。
所压场景为一个录入接口,但是参数需要从场景关联接口中获取,所以压测场景分为三个接口,请求方式都为post (后发现有一个查询接口为get请求):
压测接口逻辑
压测加压策略为梯度加压(Stepping Thread Group),目的是在整个压测过程中观测不同情况下系统的反应情况,压测效果好于普通加压线程组:
梯度加压策略展示
在已经完成性能优化之后,再次进行压测时发现jmeter并发能力减弱(直观感受),实际为接口响应时间、数据库CPU消耗优化效果明显,但tps较低,无法满足正常压测标准,且在梯度加压第二次时(200–>400)jmeter崩溃闪退,报错如下图
报错展示

问题分析解决:

**1.**通过返回报错结果可以直接判断出崩溃闪退是因为jmeter无可用分配内存导致,由此确定后续分析判断方向;
**2.**解决思路1:增大jmeter运行可分配空间。查看jmeter配置文件,将apache-jmeter-5.4.1/bin目录中的jmeter配置文件修改:找到内存配置行

: “${HEAP:=”-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"

将其改成压力测试机器所适配的内存大小

: “${HEAP:=”-Xms1g -Xmx8g -XX:MaxMetaspaceSize=1024m"}"

重新压测结果:有效果,但仍旧崩溃闪退;
3.1解决思路2:寻找内存占用原因。
猜测内存泄露原因为前两个查询接口加了大对象的json提取器导致压测时消耗了太多的可分配空间,验证方式为禁用掉前面两个查询接口的json提取器和录入接口(防止功能报错)
重新压测结果:依旧崩溃闪退,猜测验证失败;
3.2解决思路2:寻找内存占用原因。
猜测内存泄露原因为硬件原因,更换压测机器,用相同脚本再次压测,对比验证。
压测结果:依旧崩溃闪退,猜测验证失败;
3.3解决思路2:寻找内存占用原因。
猜测内存占用与所压测接口有关,对单接口进行压测。
压测结果:压测第一个查询接口时表现良好,未出现崩溃闪退的情况,而在压测第二个查询接口的时候jmeter出现崩溃闪退的情况,以此定位到脚本中第二个查询接口是jmeter出现崩溃闪退的原因;
4.1继续深入分析问题出现原因
由于前面两个接口都为查询接口,且业务逻辑类似,压测结果迥异,因此采用对比分析的方法进行分析判断:
查询接口1:
查询接口1
查询接口2:
查询接口2 通过对比发现两个接口的请求方式不同,请求传参的方式不同,但是请求方式固定无法改变,只能在请求传参的方式做调整。jmeter自带固定参数的传参方法(同请求一起发送参数)可能会增加一次读取转化的过程,该过程可能会消耗较多空间,再加上该请求为get方式,无法采用json格式传参,因此调整传参方式:将参数直接拼入url中,减少jmeter读取转化的过程。
调整后结果:
调整后结果 压测结果:未出现崩溃闪退现象,且压测过程中tps、响应时间表现出良好的加压能力,然后对全场景三个接口进行压测,仍旧未出现崩溃闪退现象。

结果整理:

1.jmeter内存固定,需要手动调整以适应当前压力测试机器的资源配置和压测策略
2.并发压测过程对所在压测机器的资源也是较大的考验,因此在写压测脚本时还应该考虑内存消耗问题,如:一般用来获取大量的可重复参数的csv文件设置,不宜选择过大的文件进行读取传参,会严重影响内存分配和所在机器加压能力,
3.压测出现崩溃闪退问题时,会自动打印报错日志且输出为log文件,存放目录为:apache-jmeter-5.4.1/bin

要解决JMeter运行压测闪退问题,可以按照以下步骤进行操作: 1. 首先,确保你已经正确配置了JMeter的环境变量。编辑jmeter.bat文件,双击运行jmeter.bat文件,查看运行情况。\[1\] 2. 检查你的Java环境是否正确安装。你可以从Oracle官网下载JDK并进行安装。确保你下载的是适合你操作系统的版本。\[2\] 3. 如果在启动JMeter时遇到错误信息"'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件。Not able to find Java executable or version. Please check your Java installation. errorlevel=2",这可能是由于Java环境变量配置不正确导致的。请检查你的Java环境变量配置是否正确。 4. 确保你的JMETER_HOME路径配置正确。避免将路径配置到\bin目录下,因为这样会导致路径错误,从而导致闪退。\[1\] 如果你按照以上步骤操作后仍然遇到问题,请提供更多详细的错误信息,以便我们能够更好地帮助你解决问题。 #### 引用[.reference_title] - *1* [JMeter5启动闪退问题](https://blog.csdn.net/Little_white11/article/details/121166381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [2、jmeter 安装配置启动闪退问题](https://blog.csdn.net/weixin_43145997/article/details/108615577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值