我有一个网站会随机抛出 500 错误(通常每隔几个小时一次)。我检查了事件视图并看到以下错误:
为应用程序池提供服务的进程'姓氏'关闭时超出时间限制。进程 ID 为“xxxx”。
我想知道这个问题的潜在原因是什么,以便我可以修复它?
答案1
每个网站(以及潜在的每个 Web 应用程序)都是 IIS,链接到一个包含托管过程配置的应用程序池。
这些属性中的几个与进程如何回收(终止和重新启动)有关。默认情况下,每个应用程序将每 1740 分钟(29 小时)终止一次,但如果应用程序未使用(同样,默认情况下)20 分钟,如果它无法响应“ping”(实际上是健康监测节拍),也可以回收它。管理员可以设置其他限制。
当应用程序被回收时,容器进程会被关闭。它有(默认情况下)90 秒的时间来正确关闭,否则将被强制关闭。
因此,导致您出现问题的原因是您的 Web 应用程序的回收限制之一已达到,导致 IIS 尝试终止它。不幸的是,应用程序未能及时关闭,导致出现(临时)错误 500。
现在,还有另一个方面:如果您的应用程序在 5 分钟内“失败”(即发回服务器错误)超过 5 次(默认情况下),它将被 IIS 关闭并保持关闭状态,直到您手动重新启动它。
所有这些都表明您的应用程序代码存在错误。请与该代码的供应商联系,他们将帮助您诊断确切的问题。