.NET 6 WebApp随机返回503错误,需重启应用池恢复,求助排查
我在Azure托管的IIS 10.0服务器上部署了一个带用户认证的简单.NET 6.0 Web应用,该应用与同一虚拟网络内另一台机器上的SQL Server 2017数据库进行读写交互。应用初期运行正常,但一段时间后,即便无人访问,也会突然停止工作并返回Http Error 503 Service Unavailable错误,每次都必须重启应用池才能恢复。我已启用事件日志追踪,但未捕获到任何相关报错信息。应用设置可参考:
。我尝试过多个Stack Overflow方案但均无效,同一服务器上其他.NET Framework/.NET Core 3.1应用无此问题,发布到Azure WebApp也会出现相同故障。
排查方向与解决方案建议
检查应用池回收与启动配置
从IIS设置入手,重点确认应用池的核心参数:- 将应用池闲置超时设为0,关闭闲置自动回收机制,观察是否还会触发503;
- 把应用池的启动模式改为
AlwaysRunning,确保回收或闲置后能自动激活应用; - 检查应用池的回收规则,暂时关闭基于内存、时间的回收策略,排查是否是回收后无法正常重启导致的问题。
排查数据库连接泄漏
应用与SQL Server交互时,连接池耗尽是常见的崩溃诱因:- 代码中确保所有
DbConnection、DbCommand、DbContext都用using语句包裹,强制资源自动释放; - 在SQL Server中执行
SELECT * FROM sys.dm_exec_connections WHERE program_name LIKE '%你的应用名称%',查看是否存在大量未关闭的连接; - 临时调整连接字符串的
Max Pool Size参数(默认100)至200,若问题缓解,说明确实存在连接泄漏,需针对性修复代码。
- 代码中确保所有
启用.NET Core应用级详细日志
IIS事件日志无报错时,直接抓取应用内部日志:- 在
appsettings.json中添加日志配置,将日志级别设为Trace并输出到文件:"Logging": { "LogLevel": { "Default": "Trace", "Microsoft.AspNetCore": "Debug" }, "File": { "Path": "./logs/app-error.log", "Append": true } } - 确保应用目录有写入权限,待503出现后,查看日志文件中崩溃前的异常记录,定位具体故障点。
- 在
检查Azure环境资源限制
不管是Azure VM托管IIS还是Azure WebApp,资源耗尽都可能导致应用被终止:- 对于Azure VM,查看监控指标中的CPU使用率、内存占用、磁盘IO情况,确认是否在故障发生前出现资源瓶颈;
- 对于Azure WebApp,进入“诊断和解决问题”模块,查看应用服务日志和性能检测器,排查是否因内存泄漏被平台强制停止。
验证.NET 6 Hosting Bundle完整性
即便服务器有其他.NET Core应用,仍可能存在.NET 6托管组件安装不完整的情况:- 重新下载安装.NET 6.0 Windows Hosting Bundle,覆盖现有安装;
- 重启IIS服务后,执行
dotnet --info确认运行时版本正确。
排查用户认证组件资源泄漏
带用户认证的应用可能存在认证逻辑的资源未释放问题:- 检查Cookie/JWT认证中间件的自定义逻辑,确认没有内存泄漏的代码;
- 若使用EF Core处理用户数据,确保
DbContext通过依赖注入正确管理生命周期,避免手动实例化后未释放。
内容的提问来源于stack exchange,提问作者Claudio Zocca
相关产品推荐
相关产品推荐


。我尝试过多个Stack Overflow方案但均无效,同一服务器上其他.NET Framework/.NET Core 3.1应用无此问题,发布到Azure WebApp也会出现相同故障。