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

如何解决IIS 10托管的ASP.NET Core Web API超时并提升并发请求数

解决ASP.NET Core Web API在IIS 10下的超时与并发性能问题

一、IIS 10 配置优化

  • 调整应用程序池参数
    • 打开IIS管理器,找到对应应用池的「高级设置」:
      • 将「队列长度」从默认1000调高到2000-3000(根据服务器CPU核心数调整,核心越多可适当加量)
      • 「进程模型」里把「闲置超时(分钟)」设为0(防止应用池自动回收中断请求),「最大工作进程数」设为CPU核心数的1-2倍(比如8核服务器设8-16)
  • 放宽网站连接限制
    • 进入网站「高级设置」,「连接限制」中的「最大连接数」设为0(无限制),「连接超时」调至600秒(根据业务需求调整,避免过短超时截断正常请求)
  • 启用HTTP/2
    • 在网站「绑定」中勾选「HTTP/2」,利用其多路复用特性减少TCP连接开销,提升并发处理效率

二、ASP.NET Core 应用内部配置

  • 优化Kestrel服务器参数
    • 在Program.cs里配置Kestrel的并发与超时:
      builder.WebHost.ConfigureKestrel(options =>
      {
          options.Limits.MaxConcurrentConnections = 1000;
          options.Limits.MaxConcurrentUpgradedConnections = 1000;
          options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(5);
      });
      
  • 调整全局请求设置
    • 在appsettings.json中添加或修改:
      "Kestrel": {
          "Limits": {
              "MaxConcurrentConnections": 1000,
              "RequestTimeout": "00:05:00"
          }
      },
      "Hosting": {
          "MaxConcurrentRequests": 1000
      }
      
  • 清理冗余中间件
    • 检查Program.cs的中间件管道,移除开发环境的Swagger、不需要的静态文件中间件等,减少请求处理的额外开销

三、代码层面性能优化

  • 全异步IO操作
    • 数据库查询、HTTP调用、文件读写等IO密集型操作必须用async/await,别让线程阻塞,这样线程能处理更多并发请求
    • 错误写法:var data = dbContext.Users.ToList();
    • 正确写法:var data = await dbContext.Users.ToListAsync();
  • 优化数据库访问
    • 给常用查询字段加索引;用批量操作替代循环单条操作;用Include/投影查询避免N+1问题
  • 缓存高频数据
    • 对访问频繁、更新少的数据,用IMemoryCache或Redis缓存结果,避免重复执行耗时操作
  • 杜绝同步阻塞
    • 绝对不要在异步方法里用.Result、.Wait()这类同步阻塞代码,会耗尽线程池,导致请求排队超时

四、服务器资源与监控

  • 排查硬件瓶颈
    • 实时监控CPU、内存、磁盘IO、带宽使用率:
      • CPU持续超80%就优化代码或升级CPU;内存不足就加内存,避免GC频繁拖慢性能;磁盘IO高就换SSD或优化数据库读写
  • 开启日志追踪
    • 启用IIS的失败请求跟踪,定位超时请求的具体路径和耗时环节;在ASP.NET Core里加健康检查或性能监控,跟踪接口响应时间和错误率

五、进阶优化方案

  • 部署负载均衡
    • 单台服务器扛不住的话,多部署几台API服务器,用IIS ARR做负载均衡,分散请求压力
  • 调整TCP/IP参数
    • 管理员权限打开命令提示符,执行以下命令提升TCP连接能力:
      netsh int tcp set global autotuninglevel=normal
      netsh int tcp set global maxsynretries=2
      netsh int ipv4 set dynamicport tcp start=1024 num=64511
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:41