.NET Core Web App(控制台)在IIS中随机重启原因排查求助
我来帮你梳理下那些容易被忽略的、可能导致你的.NET Core Web应用在IIS上无预警重启的原因:
应用池自动回收:IIS应用池默认自带多种回收触发条件,比如私有内存占用超过1.8GB、CPU使用率持续过高、每29小时(1740分钟)的定期回收,甚至请求数达到阈值。你可以在IIS管理器中找到对应应用池的「回收」选项卡,查看这些设置是否在你不知情的情况下触发了自动回收——每次回收都会重启应用进程。
应用目录文件变动:.NET Core会监听应用根目录下的关键文件(比如
web.config、appsettings.json,还有bin目录的DLL文件),如果这些文件被意外修改(比如杀毒软件扫描时的临时写入、备份工具的同步操作,甚至远程操作时的误编辑),应用会触发重启来加载新内容。另外,应用所在磁盘空间不足,也可能引发文件系统的异常变动,间接触发重启。IIS配置隐性变更:哪怕你没手动重启IIS,一些全局配置调整(比如站点绑定修改、应用池高级参数变更,或者服务器安装了新的IIS模块),都可能导致应用池自动重启以加载新配置。
系统资源耗尽:如果服务器整体内存不足,Windows的内存回收机制可能会强制终止占用内存较多的
dotnet.exe进程,之后IIS会自动重启你的应用。此外,CPU长时间满载、磁盘IO过高,也可能导致应用进程被系统或IIS强制重启。日志/临时文件堆积:如果应用在根目录生成大量日志文件,或者服务器临时目录(
%TEMP%)文件过多,一方面可能触发.NET Core的文件监听机制,另一方面也可能导致磁盘空间不足,间接引发应用重启。.NET Core运行时或应用代码问题:某些特定版本的.NET Core运行时可能存在内存泄漏、进程崩溃的bug;或者你的应用代码里有未处理的致命异常,导致进程意外终止,IIS随后会重启应用。你可以查看Windows事件查看器的「应用程序」日志,里面会有
dotnet.exe崩溃的相关记录。第三方组件干扰:如果你的应用依赖了第三方IIS模块(比如某些URL重写规则、自定义模块),或者使用的NuGet包存在内存泄漏、不稳定的情况,都可能导致进程异常,进而被IIS重启。
服务器硬件/电源问题:虽然概率较低,但服务器的硬件故障(比如内存、磁盘的间歇性错误),或者电源管理设置(比如意外进入睡眠模式,不过服务器一般不会开启),也可能导致进程意外终止,之后应用被自动重启。
排查建议
优先检查Windows事件查看器的「应用程序」和「系统」日志,里面会记录每次应用重启的具体触发原因,帮你快速缩小排查范围。
内容的提问来源于stack exchange,提问作者as9876

