答案1
我们刚刚遇到了这个问题 - 这让我很抓狂,还引发了很多其他问题。在那个低谷期间,请求会停滞,BeginRequest
或者MapRequestHandler
- 然后它们会在 10 多秒后突然再次开始进入状态。
根本原因是 IIS 应用程序正在其自己的 /bin 目录中写入文件。IIS 检测到它并发出软回收,暂时将监听工作程序的数量减少到 0(由Pipeline Instance Count
和我发现这个问题的原因所示)。然而,这并没有在任何其他工具中显示为新进程或类似内容。
我们通过使用以下方法对所有 IIS 进程进行小型转储来找到它调试诊断2在一次速度变慢时,MS 发出警告,这是通过使用 Fiddler ping 一个小端点发现的。DebugDiag 有一个 CrashHangAnalysis 报告。该报告中有很多信息 - 花了一段时间才找到包含和的HttpRuntime Shutdown Report
堆栈跟踪。System.Web.DirectoryMonitor.FireNotifications
System.Web.Compilation.BuildManager.OnWebHashFileChange
这让我查看了 prod bin 目录,发现那里写入了一个错误的电子邮件日志,导致 IIS 回收了该应用程序。这尤其奇怪,因为 New Relic 中应用程序的内存图只显示了看似稳定的内存泄漏,但实际上整个应用程序正在重新启动(有点)并且只是增加了现有内存。它看起来不像是正常的回收,PID 保持不变。不知道 IIS 试图做什么魔术。
此外,将 IIS AppPool 高级设置更改Disable Recycling for Configuration Changes
为 并True
不能阻止此问题,如另一个问题。我们必须更改并重新部署二进制文件来修复它。