http://www.cnblogs.com/yukaizhao/archive/2011/08/12/asp-net-site-restart-reasons.html
Asp.Net站點有時候會莫名其妙的重啓,什麼原因導致的卻不得而知,經過一番折騰後,我總結了導致Asp.Net站點重啓的10個原因
1. 回收應用程序池會導致站點重啓,記錄的原因是:
HostingEnvironment initiated shutdown HostingEnvironment caused shutdown
2. 修改應用程序池回收規則會導致重啓,記錄的重啓原因:
HostingEnvironment initiated shutdown HostingEnvironment caused shutdown
3. 在IIS中修改站點的名字,不會導致重啓
4. 修改站點根目錄的配置文件web.config,在配置文件註釋中添加幾個空格會導致重啓,記錄的重啓原因是:
CONFIG change HostingEnvironment initiated shutdown
但是修改子目錄的web.config文件不一定會導致馬上重啓
5. 修改aspx,master文件不一定會導致重啓;但是每修改一次都會導致一次重新編譯,重新編譯次數達到15次之後會導致站點重啓,重啓原因是:
Recompilation limit of 15 reached HostingEnvironment initiated shutdown
15次後重啓這個數字可以在web.config中做配置,修改compilation的numRecompilesBeforeAppRestart屬性值即可。
<compilation debug="false" numRecompilesBeforeAppRestart="15">
6. 刪除bin目錄下的pdb文件,會導致重啓,記錄的重啓原因是:
Change Notification for critical directories.
在bin目錄下新建一個空的文件夾,會導致站點重啓,重啓原因是:
Directory rename change notification for 'D:\projects\TestWebApp\TestWeb'.T estWeb dir change or directory rename
在bin目錄下刪除空文件夾,會導致站點重啓,記錄原因是:
Directory rename change notification for 'D:\projects\TestWebApp\TestWeb'.T estWeb dir change or directory rename
7. 修改Global.asax文件會導致站點重啓,即使加幾個空格也會重啓,記錄的重啓原因是:
Change in GLOBAL.ASAX HostingEnvironment initiated shutdown
8. 對App_Code目錄做修改會導致站點重啓
在站點根目錄下添加一個名字爲App_Code的文件夾,會導致重啓,記錄的重啓原因是:
Change Notification for critical directories. App_Code dir change or directory rename
刪除App_Code文件夾會導致站點重啓,記錄的重啓原因是:
File Change Notification Error in D:\projects\TestWebApp\TestWeb\app_code
Change Notification for critical directories.
App_Code dir change or directory rename
在App_Code文件夾下面新建或者刪除一個cs文件,會導致站點重啓,記錄的原因是:
Change Notification for critical directories. App_Code dir change or directory rename
9. 對關鍵路徑的修改都會導致站點重啓,關鍵路徑包括:
bin, App_Code, Web References,App_Browsers,App_GlobalResources,App_LocalResources
10. 另外殺毒軟件對文件的掃描,有可能會導致asp.net進程誤認爲文件或者關鍵路徑發生了變化,也會導致重啓。
以上是我總結的導致Asp.net站點重啓的10個原因。 總的來說有三個方面會導致站點重啓:一方面是IIS配置發生變化;另一方面是asp.net相關文件配置文件,global文件,aspx,ascx,master等類型的文件發生變法;第三個方面是關鍵路徑bin,app_Code, Web References,App_Browsers,App_GlobalResources,App_LocalResources發生變化。
如何記錄asp.net站點重啓的原因?
在站點執行Application_End事件中添加記錄方法。在Global.asax.cs文件中添加如下代碼即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
void Application_End( object sender,
EventArgs e) { //
Code that runs on application shutdown RecordEndReason(); } protected void RecordEndReason() { HttpRuntime
runtime = (HttpRuntime) typeof (System.Web.HttpRuntime).InvokeMember( "_theRuntime" , BindingFlags.NonPublic
| BindingFlags.Static | BindingFlags.GetField, null , null , null ); if (runtime
== null ) return ; string shutDownMessage
= ( string )runtime.GetType().InvokeMember( "_shutDownMessage" , BindingFlags.NonPublic
| BindingFlags.Instance | BindingFlags.GetField, null , runtime, null ); string shutDownStack
= ( string )runtime.GetType().InvokeMember( "_shutDownStack" , BindingFlags.NonPublic
| BindingFlags.Instance | BindingFlags.GetField, null , runtime, null ); EventLog
log = new EventLog(); log.Source
= "ASP.NET
2.0.50727.0" ; log.WriteEntry(String.Format( "\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}" ,
shutDownMessage, shutDownStack), EventLogEntryType.Information); } |
以上方法將重啓的原因和重啓時的堆棧信息記錄到了windows的事件查看器中,當然你也可以記錄到文本文件中。