我一直在搜索有关此信息无济于事。我为什么需要这个背景是我在这里问的另一个问题。更具体地说,在App_Data中创建/更新/删除文件是否会导致池回收?
如果有人可以提供导致回收的原因的详细列表,那将是很好的。
更新:正如两个用户已经注意到的,我也很乐意回答一个仅指定回收AppDomain而不回收整个池的原因的答案。
我一直在搜索有关此信息无济于事。我为什么需要这个背景是我在这里问的另一个问题。更具体地说,在App_Data中创建/更新/删除文件是否会导致池回收?
如果有人可以提供导致回收的原因的详细列表,那将是很好的。
更新:正如两个用户已经注意到的,我也很乐意回答一个仅指定回收AppDomain而不回收整个池的原因的答案。
Answers:
两种不同的效果:
AppPool进程是潜在多个AppDomain的宿主。通常,可以通过多种效果将其回收。这些可能是时间(每n小时),缺乏请求,内存使用等;所有这些都在IIS Config Manager中配置。
AppDomain(应用程序根目录的托管实例)可以更频繁地循环,而不会影响AppPool中的其他AppDomain。苔丝(Tess)在AppDomain回收方面的文章颇有见地。
您正在写入受监视的文件夹以进行重新编译。这将在某个时候触发AppDomain重新创建。
事件日志将帮助您确定是什么原因引发了回收。
您在另一篇文章中喜欢的文章实际上做得很好。
立即回收
延迟回收
可能发生在其他位置的多次更改,通常情况下,虽然我只注意到.aspx或.cs / .vb文件的更改。添加临时文本,csv或其他文件对我来说没有问题。
注意:这些都是应用程序域回收,而不是池的实际回收。通常,应用程序POOL仅根据IIS中的设置(请求数,内存限制,空闲时间或计划的重新启动)进行回收。
您可能要打开完整的AppPool回收事件日志:
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目录的应用程序-文件更改过多导致回收...
w3wp.exe
错了。这导致Application_Start
被调用Global.asax
。
为了找到答案,我打开了事件查看器。
在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: