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

使用JMeter对Spring Integration TCP服务器负载测试:服务器收不到消息

排查JMeter TcpSampler无法向Spring Integration TCP服务器发送文本的问题

我之前也踩过Spring Integration TCP和JMeter TcpSampler通信的坑,结合你的情况,给你几个具体的排查方向:

1. 重点检查消息分隔符(最常见原因)

Spring Integration TCP默认依赖消息分隔符来识别完整消息,比如常用的ByteArrayCrLfSerializer会以\r\n作为结束标记。但JMeter的TcpSampler默认发送的文本是不带结束符的,导致服务器一直等待完整消息,看起来就像没收到。

解决方法:

  • 在TcpSampler的「Text to send」末尾手动加上\r\n
  • 或者用JMeter函数生成标准换行符:${__char(13)}${__char(10)}

2. 核对TcpSampler的核心配置

  • TCPClient类选择:如果是文本通信,优先用org.apache.jmeter.protocol.tcp.sampler.TextTCPClientImpl,而不是默认的Binary实现;同时确保编码和服务器一致(比如UTF-8)
  • 连接复用设置:如果勾选了「Reuse connection」,要确认每次发送的消息都带正确的分隔符,避免粘包导致服务器解析失败
  • 超时设置:适当调大「Response Timeout」,避免服务器还没处理完就被JMeter判定为超时

3. 开启DEBUG日志排查细节

你的现有日志只显示到线程组启动,看不到发送消息的具体情况:

  • JMeter端:修改jmeter.properties,设置log_level.jmeter.protocol.tcp=DEBUG,重启后能看到发送的字节流、连接状态等细节
  • Spring Integration端:开启DEBUG日志,查看服务器是否接收到字节,以及是否因为格式不匹配被序列化器丢弃

4. 用工具验证通信链路

先用telnet或netcat手动发送测试消息,比如:

telnet your-server-ip port
> hello world\r\n

如果服务器能正常接收,说明问题出在JMeter配置;如果telnet也收不到,那要检查Spring Integration的TCP端点配置,比如:

  • 是否正确配置了deserializer(比如ByteArrayCrLfDeserializer)
  • 有没有添加消息过滤器导致消息被拦截

你的原始日志:
INFO o.a.j.e.StandardJMeterEngine: Running the test!
INFO o.a.j.s.SampleEvent: List of sample_variables: []
INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, local)
INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
INFO o.a.j.e.Sta...

内容的提问来源于stack exchange,提问作者merla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:01