在某些时候,在代码推送后不久,我们看到我们的Web应用程序中发生了大量重启,没有任何日志记录表明存在任何问题。所以我发现了这篇文章:http://weblogs.asp.net/scottgu/433194我们添加了Application_End日志记录,它立即显示了这个:
_shutDownMessage =重新编译限制达到15个HostingEnvironment启动关闭HostingEnvironment导致关闭_shutDownStack = 在System.Environment.GetStackTrace(例外e,布尔needFileInfo) 在System.Environment.get_StackTrace()处 System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand() 在System.Web.HttpRuntime.ShutdownAppDomain(String stackTrace)at System.Web.Compilation.DiskBuildResultCache.ShutdownCallBack(对象 国家) System.Threading.ExecutionContext.RunInternal(执行上下文 executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)at System.Threading.ExecutionContext.Run(执行上下文 executionContext,ContextCallback回调,对象状态,布尔值 preserveSyncCtx)at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在System.Threading.ThreadPoolWorkQueue.Dispatch()
谷歌搜索此错误显示出惊人的少,所以我们更新了我们的web.config
<compilation debug="false" numRecompilesBeforeAppRestart="100">
和中提琴!一切恢复正常。我们彻底审查了我们的更改,但没有找到任何我们认为可能成为罪魁祸首的事情。
是否有其他人遇到过这种或类似情况,或者对世界上有什么可能导致这种情况的知识/怀疑?任何反馈都会很棒!
答案 0 :(得分:7)
因此,应用程序实际上正在重新编译,并且由于重新编译后的default limit为15,因此应用程序域/应用程序池将进行回收。
通常,您会在事件查看器中看到事件ID为1305的事件。打开IIS管理器=&gt;应用程序池=&gt;右键单击应用程序池并转到高级设置=&gt;向下滚动到Generate Recycle Event Log Entry并将所有内容更改为true。此外,您可能需要启用health monitoring才能在事件查看器中查看详细信息。
当您将其增加到100时,未达到限制,因此应用程序池将在常规回收计划期间进行重新计划(默认情况下每29小时)
导致整个网站重新编译的原因列表:
配置包括文件更改,如果SectionInformation.RestartOnExternalChanges属性为true
<section name="MyAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="true" requirePermission="false" />
注意:
如果您希望能够在不导致重新编译整个站点的情况下更改顶级文件,则可以将Web.config文件中编译元素的optimizeCompilations属性设置为true
参考文献:
Understanding ASP.Net dynamic compilations
重新编译的另一个常见原因是由于文件被写入源代码文件夹,例如在源代码文件夹中写入日志文件或者试图扫描Web应用程序文件夹并且可能写入某些内容的反病毒它(您可以从反病毒扫描中排除Web应用程序文件夹并查看它是否有帮助。)
但是要准确找出导致重新编译的原因,您需要捕获ETW跟踪并查看。这里给出了如何做到的详细解释 - https://blogs.msdn.microsoft.com/tess/2008/11/06/troubleshooting-appdomain-restarts-and-other-issues-with-etw-tracing/
此处还提到了一个已知问题 - http://support.microsoft.com/kb/319947
链接中的相关文字
但是,加载许多新的.aspx或.ascx时会出现此问题 文件到服务器(例如,61个文件)。服务器卸载 每次重新编译前15个文件时的应用程序 另外15个文件被重新编译,直到服务器达到61.这 导致四次应用程序重启,即使只需要一次。
它讨论了内存含义,因此请确保您已启用定期应用程序池回收。
希望这有帮助