ASP.NET Core 2.0应用请求挂起问题求助
排查ASP.NET Core 2.0本地IIS/Kestrel环境下请求卡顿的思路
我之前也碰到过几乎一模一样的场景——ASP.NET Core应用在其他机器运行正常,本地到第5次GET请求就突然挂起30秒,而且应用完全没重启。结合你已经简化到只剩MVC和日志中间件的情况,给你几个实际排查过的有效方向:
- 先排查日志中间件的影响:既然你只保留了日志组件,先临时移除日志中间件再测试。我之前遇到过用同步日志写入(比如直接写本地文件)时,因为文件锁定或者IO阻塞导致请求挂起的情况。如果移除后卡顿消失,就把日志改成异步写入模式,或者调低日志级别减少输出量。
- 检查TCP连接状态:打开命令行执行
netstat -ano,看看本地和应用相关的端口有没有大量处于TIME_WAIT状态的连接。如果是,可能是连接没被正确回收,到第5次时占满了可用连接。可以调整Windows的TCP参数(比如缩短TcpTimedWaitDelay)来缓解。 - 关闭本地安全软件试试:很多时候本地的杀毒软件、防火墙会对HTTP请求做深层扫描,次数多了触发阈值就会导致延迟。暂时禁用这些软件再测试,能快速排除这类外部因素。
- 用诊断工具看线程阻塞情况:在Visual Studio里开启诊断工具(Diagnostics Tools),当请求挂起时,查看线程的调用栈,看看是哪个线程在等待——比如是卡在文件IO、锁等待,还是某个框架内部的操作。这一步能精准定位问题点。
- 检查Kestrel的连接限制配置:在
Program.cs的Kestrel配置里,确认是否设置了过低的并发连接数限制。虽然.NET Core 2.0默认值足够,但可以试着手动调高:WebHost.CreateDefaultBuilder(args) .UseKestrel(options => { options.Limits.MaxConcurrentConnections = 100; options.Limits.MaxConcurrentUpgradedConnections = 100; }) .UseIISIntegration() .UseStartup<Startup>(); - 确认.NET Core 2.0的补丁版本:2.0是比较老的版本,有一些已知的性能bug。试着安装.NET Core 2.0的最新补丁包,说不定能解决这个特定的卡顿问题。
内容的提问来源于stack exchange,提问作者user1755802
相关产品推荐
相关产品推荐

