我有一台安装了 IIS 6 的 Windows Server 2003 机器。这台服务器上只运行着一个基于 ASP 的网站。大约每隔 1-3 小时,IIS 就会无缘无故地停止响应(返回 500 服务不可用)。服务器使用率不高,没有记录错误,什么都没有。
重新启动 IIS(实际上仅重新启动服务)可以解决问题,直到问题再次发生。
我不知道该检查什么了。你们有人遇到过类似的问题吗?
答案1
应用程序中可能存在错误,导致应用程序池崩溃。如果您在应用程序事件日志中没有看到任何有用的信息,请尝试查看 IIS 日志文件,并查看服务停止响应之前最后几个请求针对的是什么资源。也就是说,找到在 500 开始的条目之前立即具有成功响应代码(200、301、304 等)的条目。
如果您拥有代码,请启动一个测试实例并对该/那些资源进行一些测试。
答案2
您的 ASP 网站是否将 com 对象加载到 IIS 应用程序对象中?我们在 Win 2003 和 Win 2008 中遇到了非常类似的问题(但据我们所知,后者仅在 VMWare 上出现)。我们的 Web 应用程序将 com 对象加载到 IIS 应用程序对象中。com 对象是单线程的,因此我们的 asp 脚本必须在调用其主方法之前锁定 IIS 应用程序对象,以确保一次只有一个请求可以调用它。间歇性地,这会导致挂起,我们认为这是由不同请求对资源的死锁引起的。
解决方案是编写一个 DCOM 可执行文件,作为 COM 对象的主机进程。然后,ASP 实例化进程外 DCOM 对象,而不是进程内 COM 对象。这是根据 Microsoft 工程师的建议完成的,并解决了我们案例中的问题。