IIS偶发503错误且无法自动恢复,需获取根因日志
我正在排查生产环境中ASP.NET MVC网站的IIS 503错误问题,希望能找到定位根因的有效方法,具体情况如下:
目标
找到让IIS报告503错误根因的排查方法。
问题
生产环境里,我们的ASP.NET MVC网站所有端点偶尔会出现IIS返回503错误的情况,而且除非重启应用程序池,否则无法恢复。需要特别说明的是,出现问题时IIS管理器里的应用程序池仍处于运行状态,我反复刷新确认过这点。
配置文件
我已经清理了这些文件里的敏感信息,就算缺少用户名和密码也不用在意:
- Machine.config
- Web.config
远程诊断
我在生产环境做了以下排查工作:
- 查看所有异常日志,未发现未处理的异常;能看到有异常抛出,但全部都被处理了。
- 检查事件日志,找不到IIS、ASP.NET或.NET Runtime相关的错误;其他日志也无异常,而且已经和系统团队确认过事件日志的写入权限没问题。
- 开启失败请求跟踪并查看日志,只发现一条导致500错误的
Operation completed successfully信息;暂时没找到相关文档解释,但我推测这条信息指向向客户端报告问题的操作已完成。 - 检查代理到负载均衡服务器的流量:用HAProxy做代理,通过Graylog聚合分析数据;高峰时段请求耗时都是毫秒级,但问题出现后,HAProxy会堆积大量请求,耗时明显增加;问题和具体端点无关,触发问题的第一个请求也不固定。
本地诊断
我试着在本地复现生产环境的症状:
- 手动抛出
ThreadAbortException:失败请求日志内容和生产环境一致,但应用程序池会停止,和生产环境症状不符。 - 把应用程序池队列长度设为10(生产和本地默认值为1000),用JMeter以约800请求/秒的频率压测本地机器:成功复现了完全相同的症状;但添加第二个工作进程后(生产环境有2个工作进程且做了负载均衡),问题就不再出现了;我还没找到确认是否达到队列长度限制的方法,查看性能计数器的数据和Graylog里的流量数据对不上。
目前来看,只有本地诊断里的第二种情况和生产环境症状最接近,但我还是没找到能让IIS生成相关日志来确认根因的方法。
内容的提问来源于stack exchange,提问作者Max Young
相关产品推荐
相关产品推荐

