为什么IIS工作进程每29小时而不是每24小时回收一次?


24

当您在IIS上设置站点时,默认情况下工作进程每隔1740分钟(29小时)进行回收。为什么要选择29小时而不是24小时或48小时这样的奇数?

Answers:


27

在Tech Ed 2003上,演示者被问到这个问题,答案是他们希望有一个不规则的循环来防止它在日常边界上发生(例如,与服务器/域上计划的其他日常任务区分开)。

这里的网站(链接无效)推测:

...(29是)24之后的第一个素数,使它在任何其他服务器进程中以规则模式发生的可能性最小;简化对问题的调查

另一个站点似乎确认了这一点:

Wade Hilmo)建议使用29小时,原因很简单,因为它是24时最小的素数。他希望采用一种交错且非重复的模式,该模式不会每天发生一次以上


有趣。我个人认为,每天在同一时间重复某件事会更容易跟踪工作进程的回收是否导致了其他问题。例如,跟踪大约每天发生的问题很困难,但如果每天晚上7点发生,则更容易,因为您可以在系统中搜索当时发生的事件。我知道您可以将IIS设置为在任何需要的时候都进行回收,但是大多数情况下将其保留为默认状态。感谢您的回答!
盖伊2012年

18

好的,这困扰着我,所以我仔细研究了一下,终于找到了一个显然是IIS团队成员的帖子

IIS6默认每29小时回收一次的原因(我们有一个理由

IIS6默认情况下每29小时回收一次(我们有选择29小时作为默认值的原因)的原因是,很有可能,运行在它上面的Web应用程序不可靠,并且实际上需要经常重新启动。

因此,IIS6的构建是基于这样一个前提(公认地愤世嫉俗的):用户的Web应用程序将不会运行超过24个连续小时,相应地计划功能,并选择默认值。辅助进程每29小时循环一次,监视进程的启动和关闭,对进程进行持续ping操作以确保其正在运行,对进程句柄进行跟踪并在其意外终止时发出信号,等等。

意识到回收是操作的正常部分,IIS6还确保将这种回收与最终用户隔离开来-由于某些内核模式魔术,最终用户的TCP连接在回收期间永远不会终止。结合存储进程外进程状态的用户模式应用程序(如ASP.Net会话状态服务),即使Web应用程序在处理每一个单独的应用程序后崩溃,它实际上也可以保证可靠的正常运行时间,而不会造成用户可见的数据丢失用户要求。

这与IIS6所能达到的效果差不多-给定不可靠的Web应用程序,使其对最终用户看起来可靠,并且不需要对不可靠的Web应用程序进行任何修复就可以做到这一点。

当然,并非所有不可靠的应用程序都可以看起来可靠-如果是这样,那么我们都失业了!-但IIS6肯定会尝试更多以提高弹性。

在您的情况下,弹性只会对非持久性用户状态产生副作用,但可以轻松进行调整。

假设您的Web应用程序永远不会出现问题,并且处于进程内会话状态,那么您将需要更改以下默认值:1.关闭29小时的定期回收2.关闭20分钟的空闲超时

这将防止会话状态意外丢失。

当然,如果您曾经使用进程外会话状态的应用程序,则可以将所有内容保留为默认值,而永远不会注意到功能或可靠性上的差异。


1
我问这个问题很愚蠢,但是如果IIS假定Web应用程序无法在24小时内完成任务,那么29是一个不错的选择吗?他们不应该选择一个低于24的数字吗?我在解释这个解释时哪里错了?
Alpha

可能没有默认值的“最佳”答案,管理网站的人员应基于应用程序和系统做出有意识的决定。
DOK 2012年

@Alpha -我同意-那是没有意义的-它应该默认为22或23小时或至少一些低于24
盖伊

[需要引用]
piers7 2013年

每天早上,我在网站的某些部分收到一个奇怪的编译错误,该错误只能通过回收来解决。我的猜测是,由于低负载,空闲超时会在一夜之间触发,并且由于某种原因,当它再次启动时,编译错误又回来了。感谢您的带头,我将沿着这条道路解决我的问题...
sonjz 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.