我在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是否还有其他原因可以回收我的应用程序池?我是否可以启用任何其他类型的日志记录来查找正在发生的事情?
答案 0 :(得分:7)
当您遇到此行为时,您最近是否已将文件部署到服务器?
编译标记上有一个名为numRecompilesBeforeAppRestart的令人讨厌的配置选项:
<system.web>
<compilation debug="true" numRecompilesBeforeAppRestart="15">
这个值默认为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