我们有几个网站都安装在 Windows Server 2008 R2 和 IIS 7 上,它们偶尔会挂起,直到各自的应用程序池被回收。
我所说的挂起是指浏览器将尝试检索站点,并将尝试加载很长时间,有时 5-10 分钟后它才会开始显示网页,有时甚至在那之后它也不会显示任何内容,并且浏览器仍然似乎正在尝试加载网页。
当前的解决方法是登录服务器打开 IIS 7 控制台并回收网站所附加的工作进程。
是什么原因导致了这种情况?我们如何永久解决这个问题?
答案1
发生这种情况时,您是否查看过 IIS 日志?这可能是您首先要做的事情。
这可能是由于您的应用程序池因错误过多而停止或陷入困境所致。如果您进入应用程序池的高级设置,会发现一个快速失败保护部分。
您可以增加故障间隔以及最大故障数(该间隔内允许的故障次数),但这并不能真正解决您的问题,但可能会防止其发生的频率。
在回收部分下,您还可以强制应用程序池按指定的时间间隔自动回收,但这可能会导致一些会话数据丢失,并为最终用户重置某些内容。这也只能帮助停止频率,但不能解决问题的根本问题。
最好的办法是找出它停止的原因。如果这是一个 asp.net 应用程序,您可以运行 elmah 之类的工具来记录应用程序中发生的所有异常,并努力修复这些异常。
答案2
您是否检查过“挂起”期间的 CPU 使用率?应用程序代码中的无限循环将导致这种行为。除非循环中有 I/O、锁定或休眠,否则您将能够从 CPU 使用率中看到它,因为您将为每个无限循环获得一个完整核心的 CPU 使用率。