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

JMeter测试出现java.net.SocketException: Connection reset问题求助

JMeter长响应场景下Connection reset问题解决

问题描述

单用户JMeter测试场景中,页面响应时间超过4分钟时,触发java.net.SocketException: Connection reset错误;但浏览器执行相同操作,即使响应耗时5分钟仍能正常完成。

错误堆栈日志

java.net.SocketException: Connection reset
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:313)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:340)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:789)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:1025)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:483)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:477)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1461)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1066)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:939)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:650)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:66)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1301)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1290)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268)
at java.base/java.lang.Thread.run(Thread.java:1623)

已尝试的无效配置

  • user.properties 文件:
    http.connection.stalecheck$Boolean=true
    httpclient4.retrycount=1
    hc.parameters.file=hc.parameters
    httpclient4.time_to_live=600000
    
  • jmeter.properties 文件:
    https.default.protocol=TLSv1.2
    https.socket.protocols=TLSv1.2
    https.use.cached.ssl.context=true
    server.rmi.ssl.disable=true
    hc.parameters.file=hc.parameters
    http.connection.stalecheck$Boolean=true
    httpclient4.retrycount=1
    httpclient4.time_to_live=600000
    
  • HTTP请求默认设置:
    • Implementation = HttpClient4
    • Timeouts (毫秒): Connect: 600000 & Response: 600000

解决方案

1. 配置Apache HttpClient底层超时参数

创建或修改与jmeter.properties同目录的hc.parameters文件,添加以下内容(300000毫秒=5分钟,可按需调整):

http.socket.timeout=300000
http.connection.timeout=300000
http.connection-manager.timeout=300000

2. 调整连接池或禁用长连接

  • 若连接池中的闲置连接被服务器重置,可在HTTP请求采样器中取消勾选Use keepalive,禁用长连接;
  • 在user.properties中调整连接池最大闲置时间,确保大于响应超时:
    httpclient4.max_idle_time=300000
    

3. 检查服务器端超时策略

浏览器正常但JMeter报错,可能是服务器针对不同客户端设置了差异化超时,需确认:

  • 服务器的连接超时、响应超时配置;
  • 负载均衡器/反向代理的超时设置(如Nginx的proxy_read_timeout)。

4. 切换HTTP客户端实现

将HTTP请求的Implementation从HttpClient4切换为Java,绕过HttpClient的连接限制。

5. 启用TCP保活机制

在user.properties中添加配置,防止中间网络设备因长时间无数据传输断开连接:

httpclient4.socket.tcpkeepalive=true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:57:04