.NET Core 6 IIS工作进程随机崩溃,求自动重启配置方案
解决方法
1. 配置应用程序池故障恢复策略
打开IIS管理器,找到目标应用程序池的高级设置,定位到进程模型下的故障选项:
- 将「发生故障时的操作」设置为
重启 - 配置「故障间隔」(推荐设为5分钟)和「最大故障数」(推荐设为5),确保短时间内多次故障时触发保护机制
- 启用「快速失败保护」,当进程在指定间隔内崩溃次数超过阈值时,自动回收并重启进程
2. 开启自动启动与常驻运行
在应用程序池高级设置中:
- 将「启动模式」设为
AlwaysRunning,确保应用池持续运行 - 确认「自动启动」选项为
True,这样进程终止后IIS会立即启动新的工作进程
3. 捕获未处理异常(从根源减少崩溃)
自动重启是临时方案,定位并修复崩溃原因才是根本:
- 在
Program.cs中添加全局异常中间件,捕获并记录所有未处理异常:app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { var exceptionFeature = context.Features.Get<IExceptionHandlerPathFeature>(); if (exceptionFeature?.Error != null) { // 替换为你的日志组件(如Serilog、NLog)记录异常详情 Log.Error(exceptionFeature.Error, "全局未处理异常,请求路径:{Path}", exceptionFeature.Path); } context.Response.StatusCode = StatusCodes.Status500InternalServerError; await context.Response.WriteAsJsonAsync(new { Message = "服务器内部错误" }); }); }); - 配置详细的应用日志(包括请求日志、错误日志),结合事件查看器的崩溃记录,定位触发崩溃的代码路径或外部依赖问题
4. 设置合理的进程回收规则
在应用程序池高级设置的回收选项中,配置自动回收条件:
- 按时间间隔回收(如每天凌晨2点)
- 按内存占用回收(如私有内存超过1GB时回收)
- 按请求数回收(如每处理10000次请求后回收)
这些规则能避免内存泄漏、资源耗尽等问题导致的随机崩溃
内容的提问来源于stack exchange,提问作者Kannan M
相关产品推荐
相关产品推荐

