You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter中如何配置线程组实现无响应等待的持续TCP数据发送

解决方案:JMeter TCP无响应持续发送请求

方法1:直接配置TCP Sampler(无需脚本)

普通TCP Sampler仅发送一次请求的核心原因是默认会等待服务器响应,调整以下参数即可实现无等待持续发送:

  • 给线程组添加TCP Sampler
  • 配置服务器地址、目标端口
  • 关键参数设置:
    • 将Response Timeout设为0(表示发送请求后不等待响应,立即执行下一次循环)
    • 勾选Reuse connection以复用TCP连接
  • 线程组配置:设置10个线程,循环次数选无限,再通过持续时间(如24小时)控制测试时长

完成配置后,每个线程会持续发送请求,无需等待响应,且保持连接复用。

方法2:修复JSR223 Sampler的Groovy脚本

你的脚本存在几处关键问题导致请求未发送或阻塞,修复后的脚本如下:

import org.apache.jmeter.protocol.tcp.sampler.TCPSampler;

// 获取当前线程编号(从0开始)
int threadNum = ctx.getThreadNum();

// 计算计数器值(使用long避免整数溢出)
long baseCounterValue = 860181068935920L;
long counterValue = baseCounterValue + threadNum;

log.info("Thread number: " + threadNum + ", Counter value: " + counterValue);

// 将计数器值替换到请求数据中(原脚本未使用该变量,此处补上)
String dataToSend = "\$,Lt4G,LCR,NR," + counterValue + ",,L,1,08022024,112732,20.791864,85.261978,13.,225,26,Air4G,28,42,11001,,20  02,298085.8,3477,*";

log.info("Data to send: " + dataToSend);

// 创建并配置TCP Sampler实例
TCPSampler tcpSampler = new TCPSampler();
tcpSampler.setServer("dummy server");
tcpSampler.setPort(4242); // 端口需传入整数,而非字符串
tcpSampler.setRequestData(dataToSend);
tcpSampler.setReuseConnection(true); // 开启连接复用
tcpSampler.setResponseTimeout(0); // 不等待响应,发送后立即执行后续逻辑

// 发送请求
tcpSampler.sample();

关键修改说明:

  1. 端口类型修正:将setPort("4242")改为setPort(4242),端口参数要求为整数类型
  2. 添加无等待配置:setResponseTimeout(0)让JMeter发送请求后不阻塞等待响应
  3. 复用连接设置:setReuseConnection(true)确保线程持续复用已建立的TCP连接
  4. 计数器值替换:将请求数据中的固定编号替换为计算后的counterValue(原脚本遗漏了该变量的使用)

注意事项

  • 若服务器完全不返回任何数据,Response Timeout=0是最优设置,可避免JMeter因等待响应卡住
  • 复用连接时需确认服务器支持长连接,若出现连接断开情况,可配合Close connection选项添加重试逻辑

内容的提问来源于stack exchange,提问作者keshav kumar Goud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:15:55