我一直在寻找相关信息,但并没有结果。我需要这个的背景是我在这里提出的另一个问题。更具体地说,是否在App_Data中创建/更新/删除文件会导致池重新启动?
如果有人能提供一个详细的列表,列出什么会导致池重新启动,那就太好了。
更新:正如两位用户已经注意到的那样,我也很乐意获得一个答案,指定仅重新启动AppDomain而不是整个池的原因。
我一直在寻找相关信息,但并没有结果。我需要这个的背景是我在这里提出的另一个问题。更具体地说,是否在App_Data中创建/更新/删除文件会导致池重新启动?
如果有人能提供一个详细的列表,列出什么会导致池重新启动,那就太好了。
更新:正如两位用户已经注意到的那样,我也很乐意获得一个答案,指定仅重新启动AppDomain而不是整个池的原因。
你喜欢的那篇文章在另一篇帖子中做得非常好。
立即回收
延迟回收
可能会出现在其他位置进行多个更改,但通常情况下,我只注意到在 .aspx 或 .cs/.vb 文件更改时才出现问题。添加临时文本、csv 或其他文件并没有给我带来问题。
注意:这些都是应用程序域的回收,而不是池实际的回收。通常情况下,应用程序池只会根据 IIS 中的设置(请求数、内存限制、空闲时间或计划重启)进行回收。
两种不同的影响:
AppPool进程是潜在多个AppDomains的主机。通常可以通过一些因素进行回收,例如时间(每隔n小时)、请求不足、内存使用等,都可在IIS Config Manager中配置。
AppDomain是您应用程序根目录的托管实例,可以更频繁地循环使用,而不会影响AppPool中的其他AppDomains。Tess的关于AppDomain回收的帖子非常有启发性。
您正在写入一个目录,该目录受到重新编译监视。这将在某个时候触发AppDomain的重建。
事件日志将帮助您确定何种原因引起了回收。
你可能希望打开完整的应用程序池回收事件日志:
cscript adsutil.vbs Set w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255
你可能想看一下这篇Scott Guthrie的博客文章:http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx。这篇文章展示了如何在Global.ASAX中编写代码来记录Application.End事件的实际原因,对于诊断一些问题非常有用。其中一个例子是某个应用程序将日志文件写入wwwroot目录,导致文件变化过多而造成回收...
这可能是根据偏好每天发生的,或者是当进程的最大虚拟内存超过时发生的。
这是一个设置,您可以根据应用程序池运行的时间或处理的请求数量来操作它进行回收。
它还会在 web.config 更改和其他已发布的内容上进行回收。
IIS 重置也可以解决问题,停止/启动服务也可以。
w3wp.exe
出现错误。这导致在 Global.asax
中调用了 Application_Start
。
为了找出原因,我打开了事件查看器。
在Windows日志下,我进入了应用程序。
我看到了一个应用程序错误:
Faulting application name: w3wp.exe, version: 10.0.16299.15, time stamp: 0x0aeb5595
Faulting module name: KERNELBASE.dll, version: 10.0.16299.334, time stamp: 0x6369e29f
Exception code: 0xe0434352
Fault offset: 0x0000000000014008
Faulting process id: 0x2900
Faulting application start time: 0x01d43b16f726cbb9
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\WINDOWS\System32\KERNELBASE.dll
Report Id: 998cf55d-2cd9-4b8d-9884-2110e3fd1411
Faulting package full name:
Faulting package-relative application ID: