asp.net performance
生活随笔
收集整理的這篇文章主要介紹了
asp.net performance
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過(guò)系統(tǒng)配置來(lái)提高ASP.NET應(yīng)用程序的穩(wěn)定性
大家都知道,要實(shí)現(xiàn)一個(gè)24*7全天候運(yùn)行的應(yīng)用程序并不是一件容易的事。我的一個(gè)項(xiàng)目就曾經(jīng)在暴力負(fù)荷下堅(jiān)持了20多個(gè)小時(shí)后還是壯烈掛掉了。幸運(yùn)的是,ASP.NET和IIS為我們提供了一些簡(jiǎn)便的設(shè)施,使我們能夠輕松構(gòu)建超級(jí)穩(wěn)定的.Net應(yīng)用程序。不過(guò)稍嫌不爽的是,Windows 2000(IIS6.0 以下版本) 和 Windows 2003(IIS6.0)系統(tǒng)下的配置方法不盡相同。??
?? 先說(shuō)說(shuō)windows 2000系統(tǒng),熟悉ASP.NET的兄臺(tái)應(yīng)當(dāng)都知道 machine.config 這個(gè)文件吧,它保存在 %WindowPath%\Microsoft.Net\Framework\%.NetVersion%\CONFIG\ 目錄下。隨便用什么文本編輯器(當(dāng)然最土的就屬 “記事本” 了)打開(kāi)該文件,找到 <processModel ...> 這一節(jié)。ASP.NET就是根據(jù)這一節(jié)的設(shè)置,來(lái)控制ASP.NET服務(wù)進(jìn)程(aspnet_wp.exe 或 w3wp.ext )的。我們的寫(xiě)的ASP.NET 應(yīng)用程序代碼就運(yùn)行在這個(gè)進(jìn)程空間內(nèi)。如果你使用的是Framework 1.1 你會(huì)在這一節(jié)中看到n多個(gè)屬性,我們關(guān)心的是下面三個(gè),等號(hào)后面是它們的缺省值:
??
?? timeout="Infinite"
??
?? idleTimeout="Infinite"
??
?? memoryLimit="60"
??
?? 在 Framework 2.0 下你看不到它們,但你可以手工把它們添加進(jìn)去。
??
??
?? 我來(lái)翻譯一下這三個(gè)屬性的意思,在持續(xù)運(yùn)行了 timeout 指定的時(shí)間后,重啟 ASP.NET服務(wù)進(jìn)程,timeout 的缺省值為無(wú)窮大,你可以按“HH:MM:SS”的格式重新設(shè)置,如,timeout=24:00:00表示24小時(shí)后重啟; 如果在 idleTimeout 指定的時(shí)間內(nèi)沒(méi)人的訪(fǎng)問(wèn),則重啟 ASP.NET服務(wù)進(jìn)程,idleTimeout 的缺省值同樣為無(wú)窮大,設(shè)置方式如上;如果ASP.NET服務(wù)進(jìn)程 使用的內(nèi)存占系統(tǒng)總內(nèi)存的百分比超過(guò)了 memoryLimit 指定的數(shù)量,則重啟 ASP.NET服務(wù)進(jìn)程。
??
??
?? 明白了吧,通過(guò)這三個(gè)屬性的配合,就可以神不知,鬼不覺(jué)的重啟服務(wù)進(jìn)程,從而使咱的應(yīng)用程序生生不息的運(yùn)行下去。我這樣說(shuō),細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)問(wèn)題了,當(dāng)服務(wù)進(jìn)程重啟時(shí),客戶(hù)端的會(huì)話(huà)(Session)必然會(huì)丟失,用戶(hù)的操作也就被中斷了。怎么能做到“神不知,鬼不覺(jué)”呢?
??
?? 這個(gè)問(wèn)題確實(shí)存在,不過(guò)可以通過(guò)如下措施將其影響減至最小,甚至完全消除:
??
?? 首先,我們可以把 idleTimeout 設(shè)為一個(gè)合理的值,通常我會(huì)將其置為會(huì)話(huà)(Session)超時(shí)設(shè)置的1.5-3倍。將timeout 置為程序能堅(jiān)持的上限值,我通常將其置為24小時(shí)。這樣將迫使服務(wù)進(jìn)程在空閑時(shí)重啟,由于這時(shí)不存在任何會(huì)話(huà)(Session),所以也就不可能中斷用戶(hù)的操作。這種設(shè)置在中小企業(yè)辦公環(huán)境中非常有效,因?yàn)橄掳嗪蠡緵](méi)有人訪(fǎng)問(wèn)。
??
?? 當(dāng)然,上面的方法局限性很大,只能在特定場(chǎng)合起作用。如果在持續(xù)有人訪(fǎng)問(wèn),或者內(nèi)存超限的情況下重啟,用戶(hù)的操作仍然會(huì)受到干擾。一個(gè)終極的解決辦法就是,將會(huì)話(huà)(Session)狀態(tài)保存在獨(dú)立的進(jìn)程中。在ASP.Net上,這也可以通過(guò)簡(jiǎn)單的配置實(shí)現(xiàn)。?
??
通過(guò)系統(tǒng)配置來(lái)提高ASP.NET應(yīng)用程序的穩(wěn)定性" 一文講到了Windows 2000 下( 本質(zhì)上是在IIS5.0下 ,XP professional 也和2000一樣 )的配置方法, 今天我們來(lái)看看 Windows 2003 (IIS6.0) 下的配置方法。
??
?? IIS6.0默認(rèn)的運(yùn)行模式是進(jìn)程隔離模式,它通過(guò)應(yīng)用程序池來(lái)支持多個(gè)ASP.NET服務(wù)進(jìn)程并行運(yùn)行,前文講到的machine.config 文件中 <processModel ...> 這一節(jié)的大部分設(shè)置在這種運(yùn)行模式下都會(huì)被忽略掉,我們前文提到的那三個(gè)屬性也在其中。不過(guò)不用擔(dān)心,IIS6.0下的配置更加簡(jiǎn)單直觀(guān)。 具體步驟如下:
??
??
?? 2,在"進(jìn)程池"文件夾中找到你的ASP.NET應(yīng)用程序所在的服務(wù)進(jìn)程,右擊并選擇“屬性”項(xiàng),見(jiàn)下面二圖,其它就不用我多廢話(huà)了吧。
??
??
??
?? 除此之外,還有一種辦法可以讓 IIS6.0 和 IIS5.0 一樣,使用machine.config 文件中 <processModel ...> 這一節(jié)的設(shè)置來(lái)控制ASP.NET服務(wù)進(jìn)程。(詳見(jiàn)上篇文章)
??
?? 同樣打開(kāi)"IIS管理器",右擊"網(wǎng)站"文件夾,選取"屬性"項(xiàng),如下圖,勾選 "以IIS5.0隔離模式運(yùn)行Web服務(wù)":
??
??
?? 這樣,IIS6.0和IIS5.0的行為就完全一樣了,連ASP.NET服務(wù)進(jìn)程的名稱(chēng)都從"W3WP.exe"變成"ASPNET_WP.exe"了。不過(guò),這種做法完全屬于開(kāi)歷史的倒車(chē),如果沒(méi)有什么不可告人的目的,堅(jiān)決不予推薦。?
??
轉(zhuǎn)載于:https://www.cnblogs.com/hq2008/archive/2007/12/24/1012466.html
總結(jié)
以上是生活随笔為你收集整理的asp.net performance的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 求职 .net程序员!
- 下一篇: 避免DateTimePicker闪烁的解