【问题标题】:HTTP Raw request default is throwing Response message:java.net.SocketTimeoutException: Timeout exceeded while reading from socketHTTP原始请求默认抛出响应消息:java.net.SocketTimeoutException:从套接字读取时超时
【发布时间】:2021-09-17 20:23:39
【问题描述】:

我发送了一个带有主机和端口的 HTTP 原始请求默认值,我确信我可以使用我的 windows 10 设备进行连接。(使用 Test-NetConnection 测试并通过 Ubuntu 应用程序发送数据,回显“DEMO Message”| nc我的主机 6021) 但是,当我在 Jmeter 中发送请求时,出现以下错误。

采样结果如下。

Thread Name:Thread Group 1-1
Sample Start:2021-09-17 15:55:08 IST
Load time:9300
Connect Time:0
Latency:0
Size in bytes:921
Sent bytes:0
Headers size in bytes:0
Body size in bytes:921
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):text
Response code:500
Response message:java.net.SocketTimeoutException: Timeout exceeded while reading from socket


SampleResult fields:
ContentType: 
DataEncoding: null

响应如下。

java.net.SocketTimeoutException: Timeout exceeded while reading from socket
java.net.SocketTimeoutException: Timeout exceeded while reading from socket
    at kg.apc.io.SocketChannelWithTimeouts.read(SocketChannelWithTimeouts.java:133)
    at kg.apc.jmeter.samplers.HTTPRawSampler.readResponse(HTTPRawSampler.java:64)
    at kg.apc.jmeter.samplers.HTTPRawSampler.processIO(HTTPRawSampler.java:163)
    at kg.apc.jmeter.samplers.AbstractIPSampler.sample(AbstractIPSampler.java:112)
    at kg.apc.jmeter.samplers.HTTPRawSampler.sample(HTTPRawSampler.java:42)
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:630)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
    at java.base/java.lang.Thread.run(Thread.java:830)

这个演示主机和端口虽然可以正常工作,但我在实际请求中也使用了完全相同的方法。

当我使用带有以下代码的 JSR223 Sampler 时,也会出现类似的问题。

def client = new Socket('DemoHostname', 9000);
client.setSoTimeout(2000);
client << "Hello ";
client.withStreams { input, output ->
    def reader = input.newReader()
    def response = reader.readLine()
    log.info('Response = ' + response)
}
client.close() 

还有 Jmter 的 TCP 采样器。

所以根据建议,我将其作为 Http 请求发送到 Logstash 的 websocket。 好事是添加记录被添加,但 Jmter http 请求运行在无休止的状态。似乎由于 logstash 通过 TCP 通信,它无法提供 http 响应。

【问题讨论】:

  • 这不是一个有效的 HTTP 请求。服务器可能正在等待客户端继续发送,但客户端没有。双方互相等待,直到一次超时。请注意,连接本身是成功的,只是从服务器读取超时。
  • 谢谢,帮了大忙,

标签: tcp jmeter logstash


【解决方案1】:

您想通过将HELLO TEST 发送到echo.websocket.org 来达到什么目的?

如果您想发送HTTP Request there,您需要执行以下操作:

GET / HTTP/1.1
Host: echo.websocket.org
Connection: close

演示:

如果您需要对 WebSocket 服务器进行负载测试 - 您使用了错误的插件,您应该改用 JMeter WebSocket Samplers 并考虑使用更多“活动”端点,因为这个 echo.websocket.org 似乎不是不再工作了。

【讨论】:

  • 嗨 Dimitri,这是为了演示。实际上我想通过 TCP 发布到 logstash 服务器。所以刚才我通过普通的Http请求发送了相同的请求,记录被添加到logstash中,但Jmter请求仍然处于无限状态。
  • 如果 HTTP 请求只是设置了一个合理的超时时间,该设置位于“高级”选项卡中。如果您不希望故障出现在 JMeter 日志中 - 添加一个 Response Assertion 作为此请求的子项,配置为预期 HTTP 状态代码 500 并选中“忽略状态”框,JMeter 会将该采样器视为成功。相同的方法可用于任何其他采样器。但是,您可能想提出自己的 AbstractTCPClient 实现,这样 JMeter 就不会“永远等待”
  • 谢谢 Dmitri T,与我们的 Dev-ops 团队核实了这一点,因为 logstash 没有发送收到的确认响应。但是,JSR223 Sampler 正在工作并以快速顺序插入数据。所以是可控的。谢谢。
  • responseCode 500 已收到,但插入是主要问题,因此即使没有 Jmeter 通过状态报告,我们也可以在 Kibana 中监控通过率。
猜你喜欢
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多