ASP.NET MVC重新编译限制达到了15个HostingEnvironment,启动了关闭HostingEnvironment导致关机

在某些时候,在代码推送后不久,我们看到在我们的Web应用程序中发生了大量重启,没有记录任何问题。 所以我发现这篇文章: http : //weblogs.asp.net/scottgu/433194并且我们添加了Application_End日志记录,它立即显示了这个:

_shutDownMessage =重新编译限制达到了15个HostingEnvironment启动了关闭HostingEnvironment导致在系统的System.Environment.get.StackTrace()处的System.Environment.GetStackTrace(Exception e,Boolean needFileInfo)处关闭_shutDownStack =,系统的System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal() System.Threading.ExedownDemand(在System.Web.HttpRuntime.ShutdownAppDomain(String stackTrace)上的System.Threading.ExedownCallBack(对象状态)System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback回调)中的.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand() System.Threading.ThreadPoolWorkQueue上的System.Threading.Quereading.QuereadingUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()中的System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,Object状态,Boolean preserveSyncCtx)处的System对象状态,布尔值preserveSyncCtx) 。调度()

谷歌搜索这个错误显然很少,所以我们更新了我们的web.config

 

和中提琴! 一切都恢复正常。 我们彻底审查了我们的变化,但没有发现任何我们认为可能是罪魁祸首的事情。

有没有其他人遇到这个或类似的,或者知道/怀疑世界上有什么可能导致这种情况? 任何反馈都会很棒!

因此,应用程序实际上正在重新编译,并且由于重新编译后15的默认限制是应用程序域/应用程序池的回收。

通常,您将在事件查看器中看到事件ID为-1305的事件。打开IIS管理器=>应用程序池=>右键单击应用程序池并转到高级设置=>向下滚动以生成回收事件日志条目并将所有内容更改为true。 此外,您可能需要启用运行状况监视才能在事件查看器中查看详细信息。

在此处输入图像描述

当您将其增加到100时,未达到限制,因此应用程序池将在常规回收计划期间进行重新计划(默认情况下每29小时)

导致整个网站重新编译的原因列表:

  1. 默认情况下,当对网站中的顶级文件进行任何更改时,将重新编译整个站点。 顶级文件包括global.asax文件以及bin /和App_Code /文件夹中的所有文件。 其他详细信息 – https://blogs.msdn.microsoft.com/tmarq/2007/11/01/asp-net-file-change-notifications-exactly-which-files-and-directories-are-monitored/
  2. 修改web.config
  3. 如果SectionInformation.RestartOnExternalChanges属性为true,则配置包括文件更改

笔记:

如果您希望能够在不导致重新编译整个站点的情况下更改顶级文件,则可以将Web.config文件中编译元素的optimizeCompilations属性设置为true

参考文献:

了解ASP.Net动态编译

重新编译的另一个常见原因是由于文件被写入源代码文件夹,例如在源代码文件夹中写入日志文件或反病毒试图扫描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.这导致四个应用程序重新启动,即使只需要一个。

它讨论了内存含义,因此请确保您已启用定期应用程序池回收。

希望这可以帮助