如何确定我的ASP.NET应用程序回收的原因

时间:2010-03-09 22:47:20

标签: asp.net iis session

我在IIS7服务器上运行ASP.NET应用程序。它已经运行了很长时间,但在过去一周左右的时间里,它已经每天多次丢弃所有用户的会话。我按照http://blogs.iis.net/ganekar/archive/2008/12/12/iis-7-0-application-pool-recycles-log-a-event-in-windows-event-log.aspx中的说明启用了所有应用程序池循环日志记录选项,但我的事件日志中没有得到任何内容。

事件日志中没有错误,除了我的所有用户都失去会话外​​,没有明显的症状。

IIS是否还有其他原因可以回收我的应用程序池?我是否可以启用任何其他类型的日志记录来查找正在发生的事情?

2 个答案:

答案 0 :(得分:7)

当您遇到此行为时,您最近是否已将文件部署到服务器?

编译标记上有一个名为numRecompilesBeforeAppRestart的令人讨厌的配置选项:

<system.web>
    <compilation debug="true" numRecompilesBeforeAppRestart="15">

http://msdn.microsoft.com/en-us/library/system.web.configuration.compilationsection.numrecompilesbeforeapprestart.aspx

这个值默认为15.我以前经历过一个杀死所有用户会话的应用程序,这对我来说是罪魁祸首。在一个轻微使用的Web应用程序更新后大约一天(新文件被复制到服务器;这最终覆盖了每个文件,编号为数百个),我们将获得持续的AppDomain重新启动,所有用户的所有会话值都会消失。

我发现这个错误报告列出了我遇到的行为: http://support.microsoft.com/kb/319947

以下是我的方案中非常重要的相关文字:

  

但是,当您遇到此问题时   加载许多新的.aspx或.ascx文件   服务器(例如,61个文件)。   服务器卸载应用程序   重新编译前15个文件时   每次还有15个文件   重新编译,直到服务器到达   61.这导致四次应用程序重启,即使只有一次   必需的。

我将值切换为99999,问题就消失了。这意味着在我的工作进程中会积累更多内存,所以我在IIS AppPool回收设置中添加了每日回收(当我的站点没有用户时凌晨3点)。

答案 1 :(得分:0)

您可以在元数据库中设置选项,以将不同类型的回收事件记录到事件日志中。

对于IIS 6.0,请参阅http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/87892589-4eda-4003-b4ac-3879eac4bf48.mspx

例如,要启用由于超出专用内存限制而记录回收事件,请在Web服务器上执行此操作:

cd %systemroot%\inetpub\adminscripts
cscript.exe adsutil.vbs set w3svc/AppPools/YOUR_APP_POOL_NAME/AppPoolRecyclePrivateMemory true

以下是IIS 7.0的[不同]说明的链接:http://technet.microsoft.com/en-us/library/cc771318%28v=ws.10%29.aspx