JMeter压测问题求助:仅能发送10k请求,无法达成预期请求量
解决JMeter压测卡10k请求无法结束的问题
问题根源分析
你当前的线程数配置(4200线程)严重过高,完全超出达到目标QPS的实际需求:
- 你的目标是4个请求各每秒14次,总QPS为56
- 4200线程会耗尽JMeter客户端的CPU、内存、网络连接数,导致无法创建新线程或发送请求,最终卡在10k请求无法推进
- 测试无法结束是因为大量线程处于阻塞状态(等待连接/响应),无法正常终止
解决方案
1. 改用QPS精准控制的配置(推荐)
放弃大线程数的方式,用JMeter的**常数吞吐量定时器(Constant Throughput Timer)**直接控制请求频率,完全匹配你的需求:
- 添加线程组:设置线程数为120(留足够余量,无需过大),循环次数设为
永远 - 添加常数吞吐量定时器:
- 选择
Calculate throughput based on为All active threads (shared) - 设置
Throughput为56(4个请求×14次/秒的总QPS)
- 选择
- 若需单独控制每个请求的14次/秒:给每个请求分别添加常数吞吐量定时器,选择
Current thread,设置Throughput为14 - 添加持续时间定时器(Duration Timer):设置持续时间为300秒,确保测试自动结束
2. 优化JMeter资源配置
- 调整JVM堆内存:编辑
jmeter.bat(Windows)或jmeter.sh(Linux),修改HEAP参数,例如:
根据你的机器内存调整,避免内存溢出HEAP="-Xms2g -Xmx2g" - 关闭不必要的监听器:压测时禁用“查看结果树”“查看结果表格”等消耗内存的监听器,只保留“聚合报告”或后端监听器
- 调整系统资源限制(Linux/macOS):执行
ulimit -n 65535临时提升文件描述符上限,避免因连接数过多导致无法建立新连接
3. 排查测试阻塞原因
- 查看
jmeter.log日志:检查是否有OutOfMemoryError、连接超时、线程挂起等报错信息 - 检查请求超时设置:若请求的响应超时时间过长,会导致线程长期阻塞无法释放,可适当缩短超时时间
内容的提问来源于stack exchange,提问作者Vitalii
相关产品推荐
相关产品推荐

