5

我正在使用 JMeter 对我们的 SMTP 服务器进行负载测试,使用 TCP 采样器(BinaryTCPClientImpl 类)来触发 HELO,等待 30 秒然后退出。

SMTP 服务器接受 HELO 并做出相应响应,JMeter 记录了正确的响应,但是它似乎没有找到响应,而是遇到响应超时并显示请求失败 500。

在 JMeter 日志中它说:

ERROR - jmeter.protocol.tcp.sampler.TCPSampler:      org.apache.jmeter.protocol.tcp.sampler.ReadException:
at org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl.read(BinaryTCPClientImpl.java:137)
at org.apache.jmeter.protocol.tcp.sampler.TCPSampler.sample(TCPSampler.java:350)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:416)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:271)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl.read(BinaryTCPClientImpl.java:123)

尽管事实上它设法记录了预期的响应!

我猜 JMeter 不知何故未能发现响应的结束?

任何有关如何解决或调试此问题的想法将不胜感激。

4

1 回答 1

7

如果您不定义EOM 字节,它会一直读取到流结束。由于流不会结束,它会超时。您必须为您使用的协议正确设置 EOM 字节。

于 2012-05-21T11:00:13.337 回答