導致Asp.Net站點重啓的10個原因

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站點重啓的原因?

http://www.cnblogs.com/yukaizhao/archive/2011/08/11/record-asp-net-restart-reason.html

在站點執行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的事件查看器中,當然你也可以記錄到文本文件中。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章