c# - visual - ASP.NET MVC重新編譯限制達到15個HostingEnvironment啟動關機HostingEnvironment導致關機



visual studio mvc (1)

所以應用程序實際上得到了重新編譯,並且由於15次重新編譯之後默認的限制是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,則配置包含文件更改

    <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

參考文獻:

了解ASP.Net動態編譯

重新編譯的其他常見原因之一是由於文件被寫入到源代碼文件夾,例如像在源代碼文件夾中寫入日誌文件或反病毒試圖掃描網絡應用程序文件夾,並可能寫入一些東西(你可以從反病毒掃描中排除網絡應用程序文件夾,看看是否有幫助)。

但是,要準確找出導致重新編譯的原因,您需要捕獲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.這導致四個應用程序重新啟動,即使只有一個是必需的。

它討論內存影響,所以確保你有定期的應用程序池回收啟用。

希望這可以幫助

https://code.i-harness.com

在某個時候,在代碼推送後不久,我們發現在我們的Web應用程序中發生了大量重新啟動,沒有任何日誌記錄表明存在任何問題。 所以我找到這篇文章: http//weblogs.asp.net/scottgu/433194 ,我們添加了Application_End日誌記錄,這立即顯示了這一點:

_shutDownMessage =重新編譯限制15達到HostingEnvironment啟動關閉HostingEnvironment導致關閉_shutDownStack = System.Environment.GetStackTrace(Exception e,布爾needFileInfo)在System.Environment.get_StackTrace()在System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()在系統System.Web.HttpRuntime.ShutdownAppDomain(String stackTrace)在System.Web.Compilation.DiskBuildResultCache.ShutdownCallBack(對象狀態)在System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback回調(System.Threading.ThreadPoolWorkQueue)上的System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()方法在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx),Object state,Boolean preserveSyncCtx) 。調度()

谷歌搜索這個錯誤顯示驚人的小,所以我們更新了我們的web.config

 <compilation debug="false" numRecompilesBeforeAppRestart="100">

和中提琴! 一切恢復正常。 我們徹底地檢查了我們的變化,但沒有發現任何我們覺得可能是罪魁禍首的東西。

有沒有其他人遇到過這樣或那樣的事情,或者有什麼知道/懷疑世界上可能造成這種情況? 任何反饋將是一流的!