如何确定为什么 IIS 需要 60 多秒才会失败?

如何确定为什么 IIS 需要 60 多秒才会失败?

当我在计算机上运行某些应用程序时,我看到一个非常烦人的暂停。基本上,计算机暂停约 60 秒,在此期间没有过多的处理器、磁盘或网络使用量(只是正常的使用量)。我不知道该进程在等待什么。有什么工具可以帮助我诊断系统/网络/域错误?

我认为这可能是域问题,因为我正在构建一个 Web 应用程序(IIS 7.5 中的 Asp.Net MVC),每当它在我的计算机上引发异常时,我都会出现 60 秒的暂停,但它在测试服务器上按预期工作(错误在一秒钟内呈现)。测试服务器不在域中。

同样,这种暂停(大约 60 秒,没有过多的 CPU、网络或磁盘使用)发生在多个应用程序中,但最烦人的是当我的 Web 应用程序中发生错误时(当它需要很长时间才能失败时,很难调试)。请注意,如果我启动调试器(我通常不会这样做),错误会立即被捕获,但一旦我运行代码,它就会暂停。故事的寓意是,暂停是在错误抛出之后 - 它不在我的代码中(无论如何发生在其他应用程序中)。

答案1

60 秒可能是 IIS 对 ASP 脚本的超时设置。是否可能存在应用程序错误?IIS 日志中记录了有关有问题的调用的哪些信息?(我总是喜欢先怀疑我的东西,然后再去其他地方查找)

答案2

初始连接的暂停可能与 DNS 和 MAC 地址解析有关。

关于网页,该网站是在另一台主机上还是在您的开发机器上?如果它在您的开发机器上,那么您可能可以排除网络是造成延迟的可能原因。

答案3

要么附加调试器(WinDBG 或 Visual Studio,或(​​无论什么))要么在进程处于等待状态时对其进行内存转储。如果您进行内存转储(任务管理器,右键单击进程并选择创建转储文件),则不会更改延迟时间,但听起来代码会缓慢失败。

评估线程堆栈,查找其他正在等待的内容。

您可以使用 DebugDiag 进行快速最佳猜测分析,或者使用 WinDBG+psscor2、sos 或其他工具来分析转储。

此外,在解决任何性能问题时,编译调试 = false 是强制性的。

相关内容