我们有运行 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)