【C#】ASP.NET應(yīng)用程序池進(jìn)程優(yōu)化
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
ASP.NET工作者進(jìn)程能夠推動其限制而獲得更高的性能。在 Internet 信息服務(wù) (IIS) Web 服務(wù)器上配置 ASP.NET 進(jìn)程模型設(shè)置。只能在 Machine.config 文件中設(shè)置 <processModel> 節(jié),并且該節(jié)影響服務(wù)器上運行的所有 ASP.NET 應(yīng)用程序。 可以參考文檔說明:http://doc.51windows.net/iismmc/?url=/iismmc/htm/aaconprocessmodelelement.htm。 ASP.NET進(jìn)程模型配置定義了一些進(jìn)程級別的屬性,像ASP.NET使用的線程數(shù)量、超時前阻止線程花費了多長時間、多少請求在繼續(xù)等待IO工作完成等等。默認(rèn)情況下,很多方面都具有太多的限制。現(xiàn)在我們使用的硬件都是采用雙核多GB的RAM服務(wù)器,因此,進(jìn)程模型配置能夠減少ASP.NET進(jìn)程消耗更多的系統(tǒng)資源并提供為每臺服務(wù)器提供更好的擴(kuò)展性。 ASP.NET 2.0 安裝將會在machine.config文件中創(chuàng)建如下配置的節(jié)點: <system.web> 需要減少這種自動配置并針對不同的特性使用一些特定的值以便自定義ASP.NET工作者進(jìn)程的工作方式。例如: <processModel 除了下面幾個不為默認(rèn)值以外,其余均為系統(tǒng)默認(rèn)值: maxWorkerThreads 每次處理默認(rèn)為20,在一臺雙核的計算機(jī)上,ASP.NET的處理就需要40了。這意味著ASP.NET在一臺并行的雙核服務(wù)器上可以每次處理40個請求。我將數(shù)量增加到100以便為ASP.NET的每次處理提供更多的線程。如果你有一個應(yīng)用程序,它的CPU處理能力并不是很強(qiáng)但是它卻能夠每秒更容易地處理多個請求,那么你就可以增加這個值。 尤其是你的Web應(yīng)用程序使用了大量的Web服務(wù)調(diào)用或者下載/上傳了很多不會對CPU產(chǎn)生壓力的數(shù)據(jù)時。當(dāng)ASP.NET用完這些工作者線程時,它會停止出來發(fā)來的多個請求。此時請求會放置到一個隊列中并持續(xù)等待直到出現(xiàn)一個空閑的工作者線程。通常到你的站點開始接受超過預(yù)期的點擊時會發(fā)生這樣的情況。那樣的話,如果你需要節(jié)省CPU的使用,可以增加每次處理的工作者線程數(shù)來達(dá)到目的。 maxIOThreads 每次處理默認(rèn)為20,在一臺雙核的計算機(jī)上,ASP.NET進(jìn)行的I/O操作就需要40個線程了。這意味著ASP.NET在一臺并行的雙核服務(wù)器上可以每次處理40個I/O請求。I/O請求能夠進(jìn)行的文件讀/寫、數(shù)據(jù)庫操作、web服務(wù)調(diào)用、從Web 應(yīng)用程序中產(chǎn)生的HTTP請求等等。因此,如果你的服務(wù)器有足夠的系統(tǒng)資源來處理更多的I/O請求,你可以將該值設(shè)置為100。特別是當(dāng)你的Web應(yīng)用程序在并行模式下進(jìn)行下載/上傳數(shù)據(jù)、調(diào)用很多外部Web服務(wù)時,非常有用。 minWorkerThreads 當(dāng)空閑的ASP.NET工作者線程數(shù)量低于這個數(shù)字時,ASP.NET就會開始將這些發(fā)來的請求推入隊列中。因此,你可以為改值設(shè)定一個較低的值以便可以增加當(dāng)前請求的數(shù)量。此外,建議不要將該值設(shè)置得過低,因為Web應(yīng)用程序的代碼可能需要做一些后臺處理和并行處理,此時會需要更多的空閑工作者線程支持。 minIOThreads 除了它是針對I/O線程以外,其它與minWorkerThreads的方式相同。然而你可以將該值設(shè)置得比minWorkerThreads還低。因為就I/O線程而言,這里不會發(fā)生并行處理的問題。 memoryLimit 指定內(nèi)存大小所允許的最大值,作為整個系統(tǒng)內(nèi)存的百分比,以便ASP.NET在啟動一個新的進(jìn)程并重新分派存在的請求之前這些工作者進(jìn)程能夠進(jìn)行消費。如果在你的服務(wù)器上僅僅只運行了你的網(wǎng)站應(yīng)用程序,而且沒有其它的進(jìn)程需要RAM,你可以設(shè)置一個更高的值,比如80。 然而,如果你同時有一個會發(fā)生內(nèi)存泄漏的應(yīng)用程序,那么最好是把該值設(shè)置為一個較低的值以便在出現(xiàn)大問題之前泄漏的內(nèi)存能得到及時的回收從而保持你的站點穩(wěn)定。尤其是當(dāng)你使用COM組件并發(fā)生內(nèi)存泄漏時。然而,這只是針對該問題的一個臨時解決方案;當(dāng)然需要你去解決泄漏問題。 除了processModel以外,另外還有一個非常重要的節(jié)點system.net,你能夠指定發(fā)出請求作為單獨IP的最大數(shù)量。 <system.net> 默認(rèn)值為2,設(shè)置得比較低。這就意味著你不能從你的Web應(yīng)用程序用一個IP地址同時鏈接多于2個的鏈接。站點獲得外部內(nèi)容很多都是由于默認(rèn)設(shè)置而遭到阻塞。這里我將其設(shè)置為100。如果你的Web應(yīng)用程序會對某一個指定的服務(wù)器進(jìn)行大量的調(diào)用,你甚至可以考慮設(shè)置一個更高的值。 該文章在 2021/3/10 11:36:26 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |