工作进程达到了允许的处理时间

10

我们大约每个月会遇到这个问题。很难确定原因,所以希望能得到任何帮助。这会导致应用程序池停止并使网站崩溃。我们已经检查了所有日志文件,但没有发现异常。我们正在使用 IIS 6 上的 2.0.3 版本。

3个回答

20

我注意到IIS默认的Web应用程序有一个29小时的循环重启计划,这可能会造成麻烦,因为它可能在用户不期望的时间进行重启。

例如:Web应用程序从凌晨12点开始运行,这意味着第二天它会在5点重启,第三天会在10点重启,第四天会在下午3点重启,以此类推(假设有足够的请求活动来保持其活动状态,以免因闲置而关闭)。

如果您的Web应用程序严重依赖于内存中的会话状态,则情况尤其糟糕,因为重启将终止会话,并可能迫使用户重新验证身份并且失去任何未保存的工作。 (如果您没有将应用程序设计得与重启无缝协作)

检查重启计划,并确保它在您预期的时间重启。有关屏幕截图,请参见此处:http://remy.supertext.ch/2010/08/iis7-worker-process-reached-its-allowed-processing-time-limit/

不确定无限循环建议...听起来像是您需要解决的重启配置问题。


你不应该尝试这样做;正如你已经注意到的,应用程序池可能会因为其他原因而重新启动;根本没有办法使它在你期望的时间重新启动。因此,你应该始终将代码编写为针对Session在每个请求中都可能被清除的情况。此外,这个问题似乎是在谈论应用程序崩溃,这是一件不同的事情。 - Andrew Barber
7
暂时不考虑会话(Session),而是专注于手头的问题,即应用程序在意料之外的时间停止。许多新手用户在使用IIS时忘记更改默认的回收间隔。当ASP.NET在计划的回收点停止时,报告的错误是“工作进程达到了其允许的处理时间”。因此,请修复您的回收设置,将其设置为可预测的值,然后从那里开始解决。对于排除应用程序停止的故障原因,ScottGu提供的这个解决方案对我非常有帮助:http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx - nothingisnecessary
1
哦,我在哪里说要避免依赖Session了?我说的是要始终编写代码,就好像Session可能会在每个请求上被清除一样。你必须这样做,无论你如何设置“回收间隔”,因为你不能依赖它何时会回收,无论你做什么。 - Andrew Barber
2
关于Session的好处。请注意,在我的原始答案中,我写道“如果您的应用程序严重依赖于内存中的会话状态”,但感谢您对此进行了讨论补充。然而,问题是关于应用程序停止,而不是Session。 - nothingisnecessary

3

这通常表示你的应用程序代码中存在无限循环。

基本上,每当一个请求进入 Web 服务器时,IIS 就会将请求交给工作进程。您可以在 IIS 中配置有多少个这些工作进程以及超时值是什么。超时是为了保持事物运行,以防应用程序代码挂起-它被杀死,以便线程可以回到池中继续服务新的请求。

因此,请查找可能的无限循环的代码。或者,它可能是一个非常长时间的数据库查询,它最终可能已经完成但超过了超时值。也许您的 Web 应用程序为最终用户提供了使查询返回太多数据或需要太多 DB 处理时间的机会。

当然,很难为您给出具体的原因,但请尝试沿着这些方向思考。


2
如果你正在遭遇崩溃问题(听起来是这样),那么你可能需要获取 Windows调试工具 的副本,并花些时间阅读Tess Ferrandez的博客——她提供了关于执行事后崩溃分析的极好建议,使WinDbg更加易于接近。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接