由于不活动,IIS 7 AppPool 在回收后记录错误

由于不活动,IIS 7 AppPool 在回收后记录错误

我们有运行 IIS 的 Windows 2008 RS Server,托管一个 ASP.NET 站点。今天早上出现了一个奇怪的序列。首先是通知,由于不活动,AppPool 正在被回收:

“服务于应用程序池‘xxxx’的进程 ID 为‘6896’的工作进程因不活动而关闭。应用程序池超时配置设置为 20 分钟。需要时将启动新的工作进程。”

这是有道理的,并且与超时设置相符,但 30 秒后我们看到:

“为应用程序池‘xxxx’提供服务的进程意外终止。进程 ID 为‘6896’。进程退出代码为‘0xc0000005’。”

我找到了一个更老的知识库文章这解释了由于权限问题在 IIS6 上可能发生这种情况的情况,但很好奇是什么原因导致在 IIS7.5 上发生这种情况,特别是因为我们并不经常看到这种情况。

答案1

与该文章类似的事情可能是原因。

该错误信息基本上是“拒绝访问”(以 05 结尾的任何内容通常表示“否”),这表明该过程在被告知离开时尝试执行某项操作,但失败了。

因为:

  • 这是一个空闲的工作进程
  • 已被告知要回收利用
  • 无论如何都会终止,并且
  • 在旧工作进程终止之前,新的工作进程会排队(除非有对同一池的待处理请求,否则此时它实际上不会运行;与此同时,HTTP.SYS 队列会重新设置为 WAS)

...对应用程序的影响应该是最小的(对任何用户的影响都是零),除非它试图在应用程序域终止时做一些疯狂的事情,或类似的事情。

如果它以应用程序池帐户的身份执行此操作(术语讨论),这确实有可能(由于没有请求而被回收),则该帐户可能在某个地方读取或写入某些内容失败。 很好很具体,不是吗?

因此,请提供更多信息:

  • 您是以特定用户帐户还是以 ApplicationPoolIdentity 身份运行应用程序池?

  • 如果是特定帐户,您是否有 manualGroupMembership=true

    • (如果是,那么用户是否是 IIS_IUSRS 的成员?如果不使用 mGM=true,则不需要,因为无论如何都会注入 IIS_IUSRS 的 SID)

相关内容