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

Jos*_*ger 6 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是否还有其他原因可以回收我的应用程序池?是否有任何其他类型的日志记录,我可以启用以找出正在发生的事情?

Ada*_*lls 7

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

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

<system.web>
    <compilation debug="true" numRecompilesBeforeAppRestart="15">
Run Code Online (Sandbox Code Playgroud)

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点).

  • 首先,我的回答写于2年前,行为可以改变.其次,我非常确定ASP.NET不会重新编译,除非您更改页面的内容.第三,我认为你需要多个页面,而不是一个页面不断变化(参见我引用的文字说明的内容).第四,请参阅上面的链接(指向MSDN错误的链接),如果您遇到特定问题,请在SO上写下实际问题或与Microsoft联系. (2认同)