Kestrel 是纯异步 I/O 模型,依赖线程池与操作系统异步机制处理高并发;IIS 是进程/线程代理模型,作为反向代理引入额外转发、缓冲和多层超时。
Kestrel 本身不创建新线程处理每个请求,而是依赖 ThreadPool 中的少量线程配合操作系统级别的异步 I/O(如 Linux 的 epoll、Windows 的 IOCP)完成大量并发连接的调度。它默认以单个 WebHost 实例运行,所有请求共享同一个事件循环上下文。
IIS 不直接执行 .NET 应用代码,它作为反向代理和进程管理器:接收 HTTP 请求 → 转发给后端的 w3wp.exe 进程(或 dotnet.exe,取决于托管模型)→ 由 ASP.NET Core 的 WebHost 处理。这意味着请求路径多了一层转发,也引入了额外缓冲和超时配置(如 requestTimeout、maxAllowedContentLength)。
applicationPool 设置(如“启动模式=始终运行”、“空闲超时=0”)直接影响首次请求延迟和长连接保持能力InProcess 托管,IIS 仅做进程宿主,不参与 HTTP 解析maxConcurrentRequestsPerCPU(旧版)或 dynamicTypes 配置可能成为瓶颈,而 Kestrel 的吞吐更取决于 CPU 和内存带宽,而非线程数Kestrel 的行为由 KestrelServerOptions 直接控制,比如 LimitMaxConcurrentConnections、KeepAliveTimeout、RequestHeadersTimeout 等,这些都在应用启动时通过 ConfigureKestrel 设置。它们作用于原始 TCP 连接和 HTTP 头解析阶段,不经过任何中间代理。
IIS 则在多个层级叠加超时:客户端到 IIS 的 connectionTimeout(system.webServer/serverRuntime)、IIS 到后端的 requestTimeout(aspNetCore 元素)、以及后端 Kestrel 自身的超时。三者不一致时,最短的那个会先触发中断,且错误日志分散在不同位置(eventvwr、stdoutLogEnabled、Application Insights)。
502.3 Bad Gateway 往往是 IIS 等待后端响应超时,但 Kestrel 其实还在处理;此时需比对 aspNetCore/@requestTimeout 和 Kestrel.RequestHeadersTimeout
SO_BACKLOG(即 ListenBacklog)设太小会导致 SYN 包被丢弃,表现为连接拒绝而非超时——这在 IIS 下不会出现,因为 IIS 自己管理 accept 队列KestrelServerOptions.Limits.MaxRequestBodySize 默认为 30MB,而 IIS 的 maxAllowedContentLength 默认仅 30MB(但单位是字节),数值相同却易因单位混淆导致上传失败当应用中存在同步阻塞调用(如 Task.Wait()、Thread.Sleep()、未 await 的 HttpClient 调用),Kestrel 的线程池线程会被快速耗尽,后续请求在 ThreadPool 队列中等待,表现为延迟陡增、ThreadPool.GetAvailableThreads 返回值趋近于 0。此时 CPU 使用率可能并不高,但吞吐崩溃。
IIS 在 OutOfProcess 模式下,w3wp 进程有自己的线程池,与 Kestrel 所在的 dotnet.exe 进程隔离;而在 InProcess 模式下,两者共用同一进程和线程池,问题表现类似 Kestrel 单独运行,但多了 IIS 的健康检查重试逻辑(如自动重启卡死的 w3wp)。
dotnet-dump collect -p + dumpheap -stat 查看 WaitHandle 或 ManualResetEvent 实例是否异常增多applicationPool/@queueLength 是关键指标:超过默认 1000 表示请求在 IIS 层已排队,说明后端处理不过来或网络转发延迟大Connection id "..." request timed out,但没有对应的应用层异常,大概率是底层 I/O 超时而非业务卡顿var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxConcurrentConnections = 1000;
serverOptions.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 100MB
serverO
ptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
});
真正难调的不是参数本身,而是 IIS 和 Kestrel 之间那几毫秒的转发延迟、缓冲区大小差异、以及超时链路里任意一环的静默截断。线上遇到偶发 502 或连接重置,先确认哪一层先超时,再查对应日志——别只盯着 Program.cs 里的配置。
# linux
# windows
# nginx
# 操作系统
# app
# 字节
# iis
# 后端
# ai
# win
# 区别
# c#
# 自动重启
# gateway
# 循环
# 线程
# Thread
# 并发
# 事件
# 异步
# http
# 负载均衡
相关文章:
制作网页的网站有哪些,电脑上怎么做网页?
如何快速查询网址的建站时间与历史轨迹?
如何使用Golang table-driven基准测试_多组数据测量函数效率
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
建站主机与服务器功能差异如何区分?
建站主机功能解析:服务器选择与快速搭建指南
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
济南网站制作的价格,历城一职专官方网站?
建站之星如何防范黑客攻击与数据泄露?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何通过西部数码建站助手快速创建专业网站?
如何在香港服务器上快速搭建免备案网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
建站之星logo尺寸如何设置最合适?
如何快速搭建二级域名独立网站?
Swift中switch语句区间和元组模式匹配
浅析上传头像示例及其注意事项
开心动漫网站制作软件下载,十分开心动画为何停播?
制作表格网站有哪些,线上表格怎么弄?
建站之星导航菜单设置与功能模块配置全攻略
东莞专业制作网站的公司,东莞大学生网的网址是什么?
建站之星安装路径如何正确选择及配置?
黑客如何通过漏洞一步步攻陷网站服务器?
高防服务器租用首荐平台,企业级优惠套餐快速部署
广东企业建站网站优化与SEO营销核心策略指南
建站之星伪静态规则如何正确配置?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
建站之星后台密码遗忘?如何快速找回?
如何快速查询域名建站关键信息?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何在万网开始建站?分步指南解析
黑客入侵网站服务器的常见手法有哪些?
电商网站制作公司有哪些,1688网是什么意思?
c# 在高并发场景下,委托和接口调用的性能对比
如何配置FTP站点权限与安全设置?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何获取PHP WAP自助建站系统源码?
如何高效利用亚马逊云主机搭建企业网站?
如何用AWS免费套餐快速搭建高效网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
开封网站制作公司,网络用语开封是什么意思?
如何快速生成凡客建站的专业级图册?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何通过商城免费建站系统源码自定义网站主题?
建站之星备案是否影响网站上线时间?
PHP 500报错的快速解决方法
*请认真填写需求信息,我们会在24小时内与您取得联系。