为什么JMeter无法达到预期请求速率?应如何提升请求吞吐量?
JMeter请求速率偏低排查及优化方案
你提供的运行日志内容如下:
2021-10-18 03:20:30,005 INFO o.a.j.r.Summariser: summary = 3510096 in 26:26:03 = 36.9/s Avg: 67 Min: 16 Max: 69589 Err: 61 (0.00%)
37次/秒的速率偏低通常是配置遗漏、运行环境限制两类原因导致,具体优化方案如下:
一、优先排查遗漏配置
- 冗余监听器未禁用:测试计划内如果开启了「查看结果树」「响应数据查看」等实时输出类监听器,会大量消耗CPU资源拉低压测性能,非调试阶段必须全部关闭,仅保留汇总统计类监听器即可。
- 线程组参数不匹配:如果线程数设置过低、Ramp-Up上升时间设置过长,会导致压力无法达到预期值,可根据目标压测量级调整线程数,Ramp-Up通常设置为1-5分钟即可,无需过长。
- 启用了额外的性能消耗配置:如果请求中开启了下载嵌入式资源、添加了大量前后置处理器/断言、设置了线程等待延迟,都会降低单线程的请求处理效率,拉低整体速率。
- 未调整默认JVM参数:JMeter默认堆内存仅为1G,大流量压测时会频繁触发GC卡顿,直接拖慢请求发送速率。
二、提升请求速率的具体操作
- 调整JVM运行参数:打开JMeter安装目录下的
bin/jmeter.bat(Windows系统)或bin/jmeter.sh(Linux系统),修改JVM堆内存配置,建议设置为运行机器物理内存的80%,例如16G内存的机器可调整为:
同时可添加G1垃圾回收器相关参数,减少GC停顿时间。-Xms12g -Xmx12g -XX:MaxMetaspaceSize=512m - 用非GUI模式运行压测:GUI界面仅可用于脚本调试,正式压测必须使用命令行模式启动,启动命令示例:
jmeter -n -t 测试脚本名称.jmx -l 压测结果文件.jtl -e -o 测试报告输出目录 - 优化测试计划配置:
- 非必要场景关闭「下载嵌入式资源」功能,或仅配置下载域名白名单内的资源
- CSV参数化时设置共享模式为所有线程共享,避免重复读取文件消耗IO资源
- 移除调试用的断言、前后置处理器
- 系统层面优化:Linux运行环境下调整文件句柄数、TCP连接参数,将
ulimit -n调整到65535以上,避免TCP连接数限制导致请求无法发送。 - 分布式压测:如果单台运行机器的CPU、网络带宽已经被打满,可采用多台机器组成JMeter压测集群,通过控制机下发脚本,多台执行机同时发起请求,大幅提升总请求速率。
内容的提问来源于stack exchange,提问作者Nir99
相关产品推荐
相关产品推荐

