JMeter运行数小时后请求量下降问题排查求助
JMeter持续测试请求量下降排查
问题概况
- 测试配置:200并发用户,预期每分钟生成6000次请求
- 现象:前几小时请求量稳定在6000次/分钟,数小时后请求量逐步下降
- 运行方式:AWS Ubuntu服务器通过CLI执行命令:
./jmeter -n -t ES_Scenario1_Endurancetest.jmx -l /data/apache-jmeter-5.6.2/bin/result/loadtest/ES_EnduranceTest_aggregateResult_100.csv & - 额外信息:单次API调用返回超过6000行数据
- JMeter配置说明:
- 线程组:线程数200,Ramp-Up时间0秒,循环永久,调度器设置持续时间24小时
- 缓存管理器:启用缓存功能,其余为默认配置
- 核心属性:配置了HTTP连接超时、响应超时,以及缓存、重定向等基础设置
- HTTP请求默认值:指定了协议、服务器地址、端口、编码,以及请求参数、消息体模板
- 结果收集器:设置了结果文件路径,包含响应数据等字段
排查步骤
1. 负载机资源瓶颈排查
- CPU/内存:用
htop监控CPU使用率,若持续90%以上说明CPU不足;用free -h查看内存,若可用内存过低或swap频繁读写,会导致JMeter线程卡顿 - 磁盘:检查结果文件所在磁盘空间,若磁盘满会导致JMeter无法写入结果,甚至终止请求;同时大量写入响应数据(单次6000行)会持续消耗磁盘I/O,拖慢性能
- 网络带宽:用
iftop监控出口带宽,若带宽占满,请求无法及时发送 - JVM堆内存:编辑
jmeter.sh调整HEAP参数,比如改为HEAP="-Xms4g -Xmx8g -XX:MaxMetaspaceSize=512m",根据实例内存合理分配
2. 目标服务器性能退化检查
- 监控目标API服务器的CPU、内存、磁盘、数据库状态,若服务器负载持续过高,会导致响应变慢,JMeter线程等待时间延长,单位时间请求数下降
- 查看目标服务器日志,排查是否有超时、连接拒绝、数据库慢查询或连接池耗尽等异常
3. JMeter配置优化
- 线程组:Ramp-Up设为0秒会瞬间启动200线程,长时间运行可能出现线程阻塞,建议设置合理的Ramp-Up时间(比如200秒,每秒启动1线程),避免瞬间压力过大
- HTTP连接池:检查
httpclient4.maxconnections属性,设置为并发数的2-3倍,确保连接复用正常,避免连接泄漏 - 结果收集:关闭不必要的字段保存,尤其是响应数据(单次6000行),仅保留请求成功/失败、响应时间等核心指标,减少磁盘和内存消耗
4. 网络问题验证
- 用
mtr持续监控负载机与目标服务器的网络延迟和丢包率,排查AWS内部网络波动 - 检查AWS安全组、WAF规则,确认是否触发限流策略导致请求被拦截
5. JMeter内部异常排查
- 查看
jmeter.log日志,排查是否有线程异常、内存溢出、资源未释放等报错信息 - 检查测试脚本是否存在资源泄漏,比如未关闭的数据库连接、文件流等
内容的提问来源于stack exchange,提问作者Harris
相关产品推荐
相关产品推荐

