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

JMeter压测IIS托管ASP.NET WebAPI出现连接超时问题

问题描述

在服务器上使用JMeter对IIS托管的ASP.NET WebAPI应用开展性能测试,压测配置为并发数2000、循环永久运行,压测启动数秒后即报Connection timed out: connect错误。压测过程中服务器CPU使用率始终处于较低水平。

已尝试的解决措施
  • 在JMeter GUI中将HTTP连接超时、响应超时均设置为200000ms
  • 在IIS管理器中将requestQueueLimit设置为65535、最小工作进程数设置为15
  • 在web.config文件中将minWorkerThread、minIoThread设置为200,超时时间设置为20分钟,随后在IIS中重启应用

以上操作均未解决问题。

相关参考截图
  • 服务器CPU使用率截图
  • JMeter运行界面截图
报错日志
org.apache.http.conn.HttpHostConnectException: Connect to XXX.XXX.com:80 [XXX.XXXX.com/XXXX] failed: Connection timed out: connect
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:408)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    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.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)

问题根因定位与解决方案

报错发生在TCP三次握手建连阶段,请求根本没有到达ASP.NET应用处理层,这也是服务器CPU负载极低、之前调整的应用层线程配置、JMeter响应超时配置全部不生效的核心原因。按以下优先级排查修复:

  1. 调整Windows Server TCP协议栈默认限制
    Windows Server默认的TCP连接队列、端口范围、连接回收参数阈值极低,2000并发下会直接丢弃SYN包导致客户端建连超时。
    • 打开注册表编辑器,定位到路径HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,新增/修改以下DWORD值:
      • TcpNumConnections:设置为16777214(放开最大TCP连接数限制)
      • TcpMaxHalfOpen:设置为65535
      • TcpMaxHalfOpenRetried:设置为65535
      • SynAttackProtect:压测环境临时设置为0(关闭默认SYN洪水防护,避免误拦截压测流量,生产环境按需调整)
      • TcpTimedWaitDelay:设置为30(缩短TIME_WAIT状态连接回收时间,单位秒)
      • MaxUserPort:设置为65534(扩大可用临时端口范围)
    • 修改完成后重启服务器生效。
  2. 补全IIS各层级连接队列配置
    之前修改的requestQueueLimit是ASP.NET托管管道层面的队列,IIS内核层HTTP.sys、应用程序池队列是更靠前的流量入口,默认值仅1000,远低于2000并发阈值:
    • 打开IIS管理器,选中对应站点,进入「高级设置-连接限制」,将最大并发连接数设置为65535
    • 选中站点对应应用程序池,进入「高级设置」,将队列长度从默认的1000调整为10000以上
  3. 排查中间链路限流规则
    检查服务器前端的负载均衡、硬件防火墙、Windows Defender防火墙的新建连接速率、并发连接数限制,2000并发很容易触发默认的SYN包限流规则,表现为客户端建连超时、服务器侧无对应请求日志、CPU无负载。
  4. 修复JMeter压测端自身瓶颈
    禁止用GUI模式跑高并发压测,GUI模式仅用于脚本调试,2000并发下GUI模式本身会出现资源耗尽无法发起新连接的问题:
    • 压测执行必须用非GUI模式,执行命令为jmeter -n -t 你的压测脚本.jmx -l 压测结果.jtl
    • 打开JMeter目录下bin/jmeter.properties配置文件,将httpclient4.max_conns、httpclient4.max_conns_per_host两个参数都调整为2500(匹配并发数要求)
    • 调整JMeter启动参数中的JVM堆内存为压测机物理内存的50%-70%,避免GC阻塞导致连接发起失败

验证方法:先将并发数降到100持续运行10分钟,如果无报错再逐步提升并发,找到报错阈值后对应调整上述参数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:36:27