asp.net 的進程模式

來源:互聯網
上載者:User
asp.net|進程|asp.net|進程 asp.net 的進程模式

使用進程模型
進程模型配置
被動進程回收
主動進程回收
記錄進程模型事件
啟用網路園
本節小結

--------------------------------------------------------------------------------
對 ASP.NET 架構應用程式最重要的要求之一是可靠性。在伺服器處理序內啟動並執行應用程式(在 IIS 中為 Inetinfo.exe)的結構沒有為產生可繼續長時間啟動並執行可靠應用程式提供堅實的基礎。有太多的資源在進程層級上共用,而且一個錯誤便使整個伺服器處理序崩潰的事情也太容易發生。
為解決此問題,ASP.NET 提供了一個進程外執行模型,保護伺服器處理序不受使用者代碼的幹擾。它還使您能夠對進程的生存期應用直觀推斷法,以提高 Web 應用程式的可用性。通過使用非同步進程間通訊,可以在效能、可縮放性和可靠性之間實現最佳平衡。

進程模型配置

進程模型設定在電腦的根設定檔 Machine.config 中公開。配置節命名為 <processModel>,如下例所示。預設情況下啟用進程模型 (enable="true")。


<processModel
enable="true"
timeout="infinite"
idleTimeout="infinite"
shutdownTimeout="0:00:05"
requestLimit="infinite"
requestQueueLimit="5000"
memoryLimit="80"
webGarden="false"
cpuMask="0xffffffff"
userName=""
password=""
logLevel="errors"
clientConnectedCheck="0:00:05"
/>

這些設定中的大多數控制何時啟動新的輔助進程為請求服務(正常取代舊的輔助進程)。進程模型支援兩種類型的回收:主動和被動。

被動進程回收

當進程行為失常或無法為請求服務時,發生被動進程回收。進程一般會顯示可偵測的徵兆,如死結、存取違規、記憶體流失等,以便觸發進程回收。可使用下表中描述的配置設定來控制觸發重新啟動進程所依據的條件。

設定 說明
requestQueueLimit 處理死結條件。此 DWORD 值被設定為隊列中允許的最大請求數,超過這個數則認為輔助進程行為失常。當超出此數值時,會啟動新的進程並重新分配請求。預設值為 5000 個請求。
memoryLimit 處理記憶體流失條件。此 DWORD 值被設定為輔助進程可使用的實體記憶體的百分比,超過這個數則認為輔助進程行為失常。當超出此百分比時,會啟動新的進程並重新分配請求。預設值為 80%。
shutdownTimeout 指定輔助進程自身正常關閉所用的時間(時:分:秒格式的字串值)。如果逾時到期,ASP.NET ISAPI 將關閉輔助進程。預設值為“00:00:05”。


主動進程回收

主動進程回收定期重新啟動輔助進程,即使該進程十分正常。在這可能是防止服務由於進程模型無法檢測到的條件而被拒絕的有用方法。進程可在超過特定的請求數後或逾時期限已到時重新啟動。

設定 說明
timeout 時:分:秒格式的字串值,用於配置時間限制,超過此限制後將啟動新的輔助進程以取代當前進程。預設值為 infinite,此關鍵字指示不應重新啟動進程。
idleTimeout 時:分:秒格式的字串,用於配置不活動的時間量,超過這個量後輔助進程將自動關閉。預設值為 infinite,此關鍵字指示不應重新啟動進程。
requestLimit 設定為請求數的 DWORD 值,超過這個數後將啟動新的輔助進程以取代當前進程。預設值為 infinite,此關鍵字指示不應重新啟動進程。


記錄進程模型事件

進程模型可在發生進程迴圈時向 Windows 事件記錄寫入事件。這由 <processModel> 配置節中的 logLevel 屬性控制。

設定 說明
logLevel 控制向事件記錄中記錄進程迴圈事件。其值可以是:
All:記錄所有進程迴圈事件。
None:不記錄事件。
Errors:僅記錄意外事件。


發生迴圈事件時,如果為該事件啟用了記錄,則嚮應用程式事件日誌寫入以下事件。

關閉原因 事件記錄類型 說明
Unexpected 錯誤 ASP.NET 輔助進程已意外關閉。
RequestQueueLimit 錯誤 因為超出了請求隊列限制,ASP.NET 輔助進程已重新啟動。
RequestLimit 資訊 因為超出了要求節流,ASP.NET 輔助進程已重新啟動。
Timeout 資訊 因為逾時間隔已到,ASP.NET 輔助進程已重新啟動。
IdleTimeout 資訊 因為空白閑逾時間隔已到,ASP.NET 輔助進程已關閉。
MemoryLimitExceeded 錯誤 因為超出了進程的記憶體限制,ASP.NET 輔助進程已重新啟動。


啟用網路園

進程模型協助啟用多處理器電腦上的可縮放性,將工作分發給多個進程(每個 CPU 一個),並且每個進程都將處理器關係設定為其 CPU。這樣就消除了處理器間的鎖爭用,是大型 SMP 系統的理想選擇。此技術稱為 Web 園藝。啟用網路園的配置設定在下表中列出。注意,這些設定僅在伺服器重新啟動後才生效。為使此更改發生,IIS 必須迴圈。

設定 說明
webGarden 控制 CPU 關係。True 指示進程應同相應的 CPU 有關。預設值為 False。
cpuMask 控制進程的數目和網路園的工作機制。為每個 CPU 啟動一個進程,其中將掩碼中的相應位設定為 1。當 UseCPUAffinity 設定為 0 時,cpuMask 設定僅控制輔助進程的數目(設定為 1 的位元)。允許的最大輔助進程數是 CPU 的數目。預設情況下,啟用所有的 CPU,並啟動同 CPU 數目相同的輔助進程。預設值為 0xffffffff。


您應瞭解 Web 園藝的一些副作用:

如果應用程式使用工作階段狀態,則它必須挑選一個進程外提供者(NT 服務或 SQL)。
應用程式狀態和應用程式靜態基於每個進程,而不是基於每台電腦。
緩衝基於每個進程,而不是基於每台電腦。

本節小結
ASP.NET 提供了一個進程外執行模型,使伺服器處理序免受使用者代碼的幹擾。它還使您能夠對進程的生存期應用直觀推斷法,以提高 Web 應用程式的整體可用性。
<processModel>設定在電腦的 Machine.config 檔案的根設定檔中公開。預設情況下啟用進程模型。
進程模型支援兩種類型的回收:主動和被動。當進程行為失常或無法為請求服務時,發生被動進程回收。主動進程回收定期重新啟動輔助進程,即使該進程可能十分正常。
進程模型可在發生進程迴圈時向 Windows 事件記錄寫入事件。這由 <processModel> 配置節中的 log-level 屬性控制。
進程模型協助啟用多處理器電腦上的可縮放性,將工作分發給多個進程(每個 CPU 一個),並且每個進程都將處理器關係設定為其 CPU。此技術稱為 Web 園藝。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.