Java.net.SocketException: Socket closed,JMeter

13

我正在使用JMeter进行3-6个用户的负载测试,经常遇到以下异常。请问这个问题是由于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)

1
基本上,您已经填满了管道。您正在POST到的应用程序没有更多可用的套接字来响应。尝试减少线程数(也称并发连接)。 - Bob Small
3个回答

1

我曾经遇到过这个问题,解决方案是尝试升级Java版本,从1.8到1.12。

由于它是一个Jar(编译的Java程序),如果你尝试使用早期版本的Java运行它,可能会导致出现这个错误。


0
这对我有效:
在计算机菜单上搜索“更新Java”并选择它,然后在Java控制面板上选择“更新”选项。现在,选择“立即更新”。等待安装并不要忘记选择“确定”以结束。
当Java更新后,POST会在JMeter上工作。这是AndiFB答案的相同解决方案。

-1
连接重置自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的新设置 即将推出的JMeter版本添加了一个设置,如果服务器没有发送Keep-Alive头,则添加空闲连接超时。

此值以毫秒为单位:

httpclient4.idletimeout=


1
引用来源:https://wiki.apache.org/jmeter/JMeterSocketClosed,这正是其他答案中提到的页面。 - CodeCaster
LoL,在这个维基页面上无法使用。至少在StackOverflow上可用。感激不尽。 - Rajesh Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接