【问题标题】:java.net.SocketException: Socket closed, JMeterjava.net.SocketException:套接字关闭,JMeter
【发布时间】:2014-08-27 07:34:25
【问题描述】:

我正在使用负载为 3-6 个用户的 JMeter。我经常得到下面的例外。请告诉我这个问题的原因是什么?这是 JMeter 或服务器应用程序的问题吗?提前谢谢你。

下一个例外:

java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
at sun.security.ssl.AppInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:481)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:298)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1105)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1094)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:429)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 基本上你已经填满了管道。您正在 POST 的应用程序没有更多的套接字可用于响应。尝试减少线程数(也就是并发连接数)。

标签: sockets jmeter


【解决方案1】:

好的,我遇到了这个问题,我尝试过的解决方案是更新 Java 版本。从 1.8 到 1.12。

由于它是一个 Jar(编译的 Java 程序),如果您尝试使用以前版本的 java 运行它,可能会导致此错误。

【讨论】:

    【解决方案2】:

    这对我有用:

    在您的计算机菜单上搜索“更新 Java”并选择它,然后在 Java 控制面板上选择“更新”选项。现在,选择“立即更新”。等待安装,最后不要忘记选择“Ok”。

    当 Java 更新时,POST 可以在 JMeter 上运行。这与 AndiFB 的答案相同。

    【讨论】:

      【解决方案3】:

      自 JMeter 2.10 以来的连接重置? 如果您最近升级到 JMeter 2.10 或 2.11,您可能已经注意到此类错误有所增加:

      套接字关闭 非HTTP响应码:org.apache.http.NoHttpResponseException(目标服务器响应失败)

      解释 此类错误的增加可以通过两个设置更改来解释:

      在 JMeter 2.10 中已禁用重试失败请求(仅限幂等请求) 在 JMeter 2.11 中禁用了 HTTP 客户端 3 和 4 实现中的陈旧检查 为什么会有这些变化? 以前的重试默认设置导致某些类型的失败中的请求数量增加。

      之前的陈旧检查有点贵,因为它适用于每个样本。这就是为什么将默认设置更改为禁用它的原因。

      重试或过时检查可以隐藏服务器配置问题:

      服务器未能发送(可选)Keep-Alive 标头 不堪重负的服务器拒绝连接,重试会增加负载 更改配置: 如果您认为此服务器行为正常,则可以在两个地方更改配置:

      启用重试 对于 HttpClient 4,在 user.properties 中设置:

      httpclient4.retrycount=1 这将使 JMeter 重试一次。对于 HttpClient 3,在 user.properties 集中:

      httpclient3.retrycount=1 这将使 JMeter 重试一次。

      启用过时检查 对于 HC4 实施:

      在 user.properties 中:

      hc.parameters.file=hc.parameters 在 hc.parameters 集中:

      http.connection.stalecheck$Boolean=true 对于 HC3 实施:

      在 user.properties 中:

      httpclient.parameters.file=httpclient.parameters 在 httpclient.parameters 集合中:

      http.connection.stalecheck$Boolean=true JMeter 2.12 中的新设置 如果服务器不发送 Keep-Alive 标头,即将发布的 JMeter 版本添加了一个设置以添加空闲连接超时。

      这个值以毫秒为单位:

      httpclient4.idletimeout=

      【讨论】:

      • 引用您的来源:wiki.apache.org/jmeter/JMeterSocketClosed,这正是另一个答案中提到的页面。
      • 大声笑,此 Wiki 页面上的服务不可用。至少它在 * 中可用。谢天谢地。