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

如何解决Non HTTP response code: java.net.SocketException?是否仅需JMeter端处理?

问题描述

测试REST API时,即使以2 RPS的速率运行5-10分钟测试,仍会出现1-2次SocketException错误;提升至16 TPS运行超1小时,错误依然存在。希望仅通过JMeter端配置解决问题,无需修改应用端。

错误信息:

Response code: Non HTTP response code: java.net.SocketException
Response message: Non HTTP response message: Socket closed

已尝试的配置:
在user.properties中添加:

httpclient4.retrycount=1
hc.parameters.file=hc.properties

在hc.properties中添加:

http.connection.stalecheckBoolean=true

测试使用Throughput Shaping Timer搭配开启tstFeedback选项的bzm-Concurrency Thread group,线程数范围10-100。

JMeter端解决方案

以下是无需修改应用端,仅通过JMeter配置调整的可行方案:

1. 优化HTTP连接池与超时设置

  • 在HTTP请求的Advanced标签中,设置合理的超时值:
    • Connect Timeout: 5000ms
    • Response Timeout: 10000ms
  • 在user.properties中添加连接池配置,避免闲置连接被服务端主动关闭:
    httpclient4.idletimeout=60000
    httpclient4.connection_pool_size=200
    
    • idletimeout:设置连接闲置时长,避免超过服务端的闲置连接超时阈值
    • connection_pool_size:根据线程数调整,确保有足够可用连接

2. 针对幂等接口启用智能重试

如果测试的REST API是幂等性接口(重复请求不会产生副作用),可配置自动重试:

  • 在HTTP请求的Advanced标签中勾选Retries,设置重试次数(如2次)
  • 在user.properties中补充重试规则:
    httpclient4.retrycount=2
    httpclient4.retry.httpstatus_codes=408,500,502,503,504
    httpclient4.retry.exception.classes=java.net.SocketException,java.net.SocketTimeoutException
    

3. 临时禁用HTTP Keep-Alive

若服务端对Keep-Alive支持不佳,可尝试关闭该特性:

  • 在HTTP请求的Advanced标签中取消勾选Use KeepAlive
  • 或在user.properties中添加:
    httpclient4.connection.stalecheck=false
    httpclient4.keepalive=false
    

4. 调整线程组与定时器配置

  • 检查Throughput Shaping Timer的TPS曲线,避免短时间内线程数剧烈波动,减少连接频繁创建/销毁的情况
  • 临时关闭tstFeedback选项,改用固定线程数+Constant Throughput Timer测试,排查是否是动态线程调整引发的连接问题
  • 添加HTTP Cookie Manager和HTTP Cache Manager,确保请求上下文一致性,避免无效连接请求

5. 升级JMeter版本

使用最新稳定版JMeter(如5.6.x及以上),新版本修复了HTTP客户端的已知连接问题,默认HttpClient4实现的稳定性更优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:18:16