問(wèn):好多asp.net程序,放在一臺(tái)服務(wù)器上,客戶端連接使用一段時(shí)間后,在服務(wù)器上打開(kāi)任務(wù)管理器一看,發(fā)現(xiàn)有很多w3wp.exe,占用內(nèi)存很大,達(dá)到1g,請(qǐng)問(wèn)為什么會(huì)這樣?有什么辦法可以避免這種情況呢?
答:這主要是你的ASP.NET 開(kāi)發(fā)的程序有 內(nèi)存泄漏;對(duì)于 非托管資源,一定要注意 釋放。
問(wèn):我的具體情況是這樣的:
服務(wù)器配置 至強(qiáng)2.8G 內(nèi)存512M SCSI硬盤(pán) 2塊 (軟鏡像)
系統(tǒng) windows 2003
現(xiàn)在掛了一個(gè)asp.net開(kāi)發(fā)的網(wǎng)站 訪問(wèn)量不大 但是出現(xiàn)一個(gè) 問(wèn)題就是
每當(dāng)服務(wù)器運(yùn)行2-3天后 訪問(wèn)網(wǎng)站就特別慢 重啟動(dòng)服務(wù)器后就 正常了
查看進(jìn)程使用內(nèi)存的情況 發(fā)現(xiàn)w3wp.exe 和sqlservr.exe 進(jìn)程 占用內(nèi)存
相當(dāng)大 達(dá)到了170多M( 每個(gè)) 物理可用內(nèi)存幾乎用光
(服務(wù)器重啟動(dòng)時(shí) 占用的內(nèi)存很小才40多M 每個(gè))
以前網(wǎng)站掛在一個(gè)虛擬機(jī)上 數(shù)據(jù)庫(kù)是分開(kāi)掛的 從沒(méi)出現(xiàn)這種情況
后來(lái) 原版移植到新服務(wù)器上就 出現(xiàn)這樣的問(wèn)題~~
還個(gè)一問(wèn)題就是 我在SQL企業(yè)管理器中查看SQL進(jìn)程 發(fā)現(xiàn)有很多是 。net 引起的進(jìn)程是sleeping 但是卻占用了內(nèi)存~ 無(wú)法釋放
搞了很久了 一直都沒(méi)解決,求救~~請(qǐng)高手 指教~~ 萬(wàn)分感謝~~~~~
答:IIS服務(wù)管理器----》應(yīng)用程序池----》添加你的應(yīng)用,并設(shè)置最大內(nèi)存,當(dāng)程序達(dá)到最大內(nèi)存后其會(huì)自動(dòng)重啟。
我的問(wèn)題跟你一樣,不過(guò)我的內(nèi)存是2G的,訪問(wèn)量比較高,一般是差不多運(yùn)行24小時(shí)后就得重啟,內(nèi)存沒(méi)耗完,W3WP進(jìn)程占到一百八九十兆,SQL占了二百多兆時(shí),就得重啟,不然整個(gè)站點(diǎn)就當(dāng)在那邊....55555555,搞了快半個(gè)月了還是不行,痛苦啊
w3wp.exe 就是你的ASP.NET應(yīng)用宿主,如果你使用了大量的Session、Cache等資源,并且Session超市時(shí)間很長(zhǎng),那么內(nèi)存占用量就比較大。應(yīng)用池是為增加性能而設(shè)的一個(gè)特性,但是也消耗很大的內(nèi)存。另外關(guān)掉Windows Server 2003里的大多數(shù)Service(那個(gè)不用都可以關(guān)掉),也可以節(jié)省一部分內(nèi)存
1.懷疑在程序中應(yīng)用的CACHE,
2.CACHE中有大量的數(shù)據(jù)
3.頻繁刷新CACHE
4.沒(méi)有設(shè)計(jì)好CACHE的方式
你的問(wèn)題我以前也遇見(jiàn)過(guò),我以前是用的Session,后我全部改成cook之后就好多了,應(yīng)該是你的Session或是你的CACHE有問(wèn)題(CACHE不太懂,但多多少應(yīng)該是有的)
跟蹤下SQL的調(diào)用記錄,在每次往CACHE或SESSION寫(xiě)入大量數(shù)據(jù)時(shí)記錄一下時(shí)間,看是否太過(guò)頻繁
1.在win2003里asp.net的進(jìn)程就是w3wp.exe
2.512M 內(nèi)存?zhèn)€人用是夠用了,但是放在服務(wù)器上就有點(diǎn)不夠用了,尤其是win2003 + asp.net +sql server 。尤其是sql server 他是很吃內(nèi)存的,如果不控制的話,他會(huì)占光所有的物理內(nèi)存(只剩下幾十M 倒 100M 吧)。win2003 本身就要占用150M左右。也就剩不下什么了。
3.優(yōu)化asp.net程序,就向樓上的說(shuō)的那樣,少用或不用session cache application之類的東西,再有就是是不是有翻頁(yè)的地方,翻頁(yè)處理不好也是會(huì)占很多內(nèi)存的。
4.限制sql的內(nèi)存。企業(yè)管理器——SQL的屬性(一般是local)——“內(nèi)存”標(biāo)簽
在這里看內(nèi)存的設(shè)置,把最大值改成100M吧。
第四條是最快的方法,可以試一試。
我的一個(gè)自開(kāi)發(fā)OA系統(tǒng)也存在這樣的問(wèn)題。
總結(jié)上面,大概原因是因?yàn)?session 和 cache 的不合理使用造成的。
我的應(yīng)用程序中,確實(shí)用了很多的Session 和 Cache,
在 MSDN 中找到 了 “動(dòng)態(tài)內(nèi)存分配”這一篇,今天就試看看,是否有效。
希望有經(jīng)驗(yàn)的朋友多給些信息,大家也好總結(jié)下出現(xiàn)類似錯(cuò)誤的原因,謝謝??!
不知道你是什么網(wǎng)站。按理說(shuō)是不會(huì)占用這么大的。如上你用了cache存放了超額的內(nèi)容。當(dāng)然。象session這種是不太可能占用這么大的了,或用了 application 類似的一些有超長(zhǎng)時(shí)間或永久保持性的對(duì)象來(lái)保存大量數(shù)據(jù)。如利用單例保存數(shù)據(jù)這些都有可能造成使用大量的內(nèi)存。
建義2003系統(tǒng)安裝至少1G內(nèi)存。
w3wp.exe是2003下的一個(gè)iis進(jìn)程,至于樓主說(shuō)的sql占用內(nèi)存,那有可能是因?yàn)槟愕膕ql沒(méi)有設(shè)置占用內(nèi)存上限
打造基于IIS 6.0的站點(diǎn)是很多企業(yè)的首選,但是IIS相對(duì)于其他Web平臺(tái)不但對(duì)硬件的要求比較高,而且其性能不夠盡如人意。如果沒(méi)有強(qiáng)勁的硬件平臺(tái),用IIS搭建的Web站點(diǎn)確實(shí)有些老牛破車的味道。另外,IIS保守的默認(rèn)設(shè)置讓這一切雪上加霜。如何在現(xiàn)有的硬件平臺(tái)上打造快捷的Web服務(wù)器呢?那就從IIS優(yōu)化,為Web減負(fù)開(kāi)始。
1、禁止多余的Web服務(wù)擴(kuò)展
IIS6.0支持多種服務(wù)擴(kuò)展,有些管理員偷懶或者不求甚解,擔(dān)心Web運(yùn)行中出現(xiàn)解析錯(cuò)誤,索性在建站時(shí)開(kāi)啟了所有的Web服務(wù)擴(kuò)展。殊不知,這其中的有些擴(kuò)展比如“所有未知CGI擴(kuò)展”、“在服務(wù)器端的包含文件”等是Web運(yùn)行中根本用不到的,況且還占用IIS資源影響性能拖垮Web,甚至某些擴(kuò)展存在漏洞容易被攻擊者利用。因此,科學(xué)的原則是,用到什么擴(kuò)展就啟用什么擴(kuò)展。
如果企業(yè)站點(diǎn)是靜態(tài)頁(yè)面,那什么擴(kuò)展都不要開(kāi)啟。不過(guò)現(xiàn)在的企業(yè)站點(diǎn)都是交互的動(dòng)態(tài)頁(yè)面比如asp、php、jsp等。如果是asp頁(yè)面,那只需開(kāi)啟“Active Server Pages”即可。對(duì)于php、jsp等動(dòng)態(tài)頁(yè)面IIS6.0默認(rèn)是不支持的需要進(jìn)行安裝相應(yīng)組件實(shí)現(xiàn)對(duì)這些擴(kuò)展的支持。不過(guò),此時(shí)用不到的擴(kuò)展完全可以禁用。
禁止Web服務(wù)擴(kuò)展的操作非常簡(jiǎn)單,打開(kāi)“IIS管理器”,在左窗格中點(diǎn)擊“Web服務(wù)擴(kuò)展”,在右側(cè)選擇相應(yīng)的擴(kuò)展,然后點(diǎn)擊“禁用”即可。(圖1)
2、刪除不必要的IIS擴(kuò)展名映射
IIS默認(rèn)支持.asp、.cdx等8種擴(kuò)展名的映射,這其中除了.asp之外其他的擴(kuò)展幾乎用不到。這些用不著的擴(kuò)展會(huì)加重web服務(wù)器的負(fù)擔(dān),而且?guī)?lái)一定的安全隱患。比如.asa,.cer等擴(kuò)展名,就可以被攻擊者利用來(lái)獲得webshell。因?yàn)橐话愕腶sp系統(tǒng)都會(huì)限制asp文件的上傳,但如果沒(méi)有限制.asa或者.cer等擴(kuò)展名,攻擊者就可以更改文件后綴突破上傳限制,運(yùn)行.asa或者.cer的文件獲得webshell。(圖 2)
刪除IIS擴(kuò)展名的操作是:打開(kāi)IIS管理器,右鍵單擊“默認(rèn)Web站點(diǎn)”選擇“屬性”,點(diǎn)擊“主目錄”選項(xiàng)卡,然后點(diǎn)擊“配置”打開(kāi)應(yīng)用程序窗口,最后根據(jù)自己的需要選擇不必要的應(yīng)用程序映射比如.shtml, .shtm, .stm等,然后點(diǎn)擊“刪除”即可。(圖3)
3、取消訪問(wèn)記錄
IIS6.0默認(rèn)開(kāi)啟對(duì)于web的訪問(wèn)記錄。當(dāng)開(kāi)啟記錄功能后,IIS會(huì)事無(wú)巨細(xì)地忠實(shí)記錄所有的web訪問(wèn)記錄。這些記錄文件的內(nèi)容是非常龐雜的,比如訪問(wèn)時(shí)間、客戶端IP、從哪個(gè)鏈接訪問(wèn)、 Cookies等,另外還包括 Method(方法), UserAgent(用戶代理)等。這些記錄不但占用大量的磁盤(pán)空間還大大地影響了web服務(wù)器的性能。有人做過(guò)評(píng)測(cè),停止訪問(wèn)記錄可以提升5%到8%的 web性能。而且這些記錄對(duì)于一般用戶,特別是中小型的Web站點(diǎn)沒(méi)有什么用途,簡(jiǎn)直太耗費(fèi)系統(tǒng)性能了,因此建議關(guān)閉它。
取消訪問(wèn)記錄的操作是:打開(kāi)IIS管理器,定位到具體的web站點(diǎn),右鍵點(diǎn)擊選擇“屬性”,在“主目錄”選項(xiàng)卡下取消對(duì)“記錄訪問(wèn)”的勾選即可。(圖4)
4、對(duì)訪問(wèn)流量進(jìn)行限制
默認(rèn)情況下IIS 6.0對(duì)于訪問(wèn)量是沒(méi)有限制的,如果并發(fā)連接過(guò)大超過(guò)了Web的負(fù)載輕則發(fā)生網(wǎng)絡(luò)擁塞,重則導(dǎo)致服務(wù)器宕機(jī)。因此需要對(duì)用戶的訪問(wèn)進(jìn)行限制,控制Web訪問(wèn)的流量。
打開(kāi)“Internet信息服務(wù)”管理器,在其窗口右側(cè)點(diǎn)擊主機(jī)名前面的“+”號(hào),依次定位到某個(gè)Web站點(diǎn)上。選中該Web站點(diǎn)右鍵單擊選擇 “屬性”,在打開(kāi)的屬性設(shè)置窗口中選中“性能”標(biāo)簽,將“啟用帶寬限制”復(fù)選框選中,在隨后被激活的“最大網(wǎng)絡(luò)使用”設(shè)置框中,指定你的網(wǎng)絡(luò)站點(diǎn)帶寬的具體數(shù)值。大家可以根據(jù)服務(wù)器的性能及其訪問(wèn)量綜合考慮繼續(xù)設(shè)置。對(duì)于一般的企業(yè)站點(diǎn)將帶寬流量設(shè)置為1500kb/s就差不多了。同時(shí)在“網(wǎng)站連接”下可以進(jìn)行連接限制的設(shè)置,大家可以根據(jù)情況設(shè)置一個(gè)數(shù)值。完成以上設(shè)置后,IIS就只能使用其被授予的資源進(jìn)行Web服務(wù),杜絕了異常情況造成的服務(wù)器過(guò)載,為Web減負(fù)。(圖5)
5、讓W(xué)eb負(fù)載自由伸縮
默認(rèn)情況下IIS是全負(fù)荷地為Web提供服務(wù)的,這在一定程度上加重了Web負(fù)擔(dān)。如何能夠自動(dòng)地根據(jù)負(fù)載變化自動(dòng)調(diào)節(jié)工作進(jìn)程呢?
利用IIS 6.0的Web園,我們只需指定用于某個(gè)應(yīng)用程序池的工作進(jìn)程的數(shù)量就可以了實(shí)現(xiàn)各個(gè)Web站點(diǎn)之間的隔離。具體的配置步驟是:在“Internet信息服務(wù)”管理器中打開(kāi)應(yīng)用程序池的“屬性”對(duì)話框,轉(zhuǎn)到“性能”頁(yè),在“Web園”下面的“最大工作進(jìn)程數(shù)”輸入框中輸入進(jìn)程數(shù)量。當(dāng)服務(wù)器的負(fù)載較小,不需要額外的工作進(jìn)程時(shí),IIS 6.0在一定的時(shí)間后(默認(rèn)20分鐘,可配置)自動(dòng)縮減實(shí)際的工作進(jìn)程數(shù)量;如果負(fù)載變大,需要額外的工作進(jìn)程,IIS 6.0再次增加工作進(jìn)程數(shù)量。另外,還可以“啟用CUP監(jiān)視”,設(shè)置“最大CPU使用率”,“刷新CUP使用率值”以及“CPU使用率超過(guò)最大使用率是執(zhí)行的操作”,這些設(shè)置可以根據(jù)需要進(jìn)行設(shè)置。當(dāng)一切設(shè)置完成后這一切就交給IIS自動(dòng)進(jìn)行,不需要管理員干預(yù)。 (圖6)
6、配置應(yīng)用呈現(xiàn)池
IIS可以支持多個(gè)Web服務(wù),特別是虛擬主機(jī)一臺(tái)服務(wù)器上有非常多的Web站點(diǎn)。如何才能做到各個(gè)站點(diǎn)之間相互獨(dú)立,不因某些Web站點(diǎn)出現(xiàn)故障而影響其他站點(diǎn)呢?為不同工作進(jìn)程指定應(yīng)用程序池是個(gè)很好的解決辦法。
(1)、創(chuàng)建
打開(kāi)“IIS 管理器”中,展開(kāi)本地計(jì)算機(jī),右鍵單擊“應(yīng)用程序池”,選擇“新建→應(yīng)用程序池”。在“應(yīng)用程序池名稱”框中,輸入新的應(yīng)用程序池名稱。如果點(diǎn)選選“將現(xiàn)有應(yīng)用程序池作為模板”,可以在“應(yīng)用程序池名稱”下來(lái)列表中選擇相應(yīng)的應(yīng)用程序池,最后單擊“確定”即可。 (圖7)
(2)、指派
在“IIS 管理器中”,右鍵單擊你要為其指派應(yīng)用程序池的站點(diǎn)然后單擊“屬性”。在該站點(diǎn)的屬性面板中“主目錄”選項(xiàng)卡,在“應(yīng)用程序池”下拉列表中選擇剛才創(chuàng)建的應(yīng)用程序池即可。如果所有的選項(xiàng)為灰色,單擊“創(chuàng)建”按鈕就可以輸入“應(yīng)用程序名”,然后在“應(yīng)用程序池”列表框中,選擇并指派網(wǎng)站的應(yīng)用程序池了。(圖 8)
(3)、回收
利用“回收”功能,可是設(shè)置如何恢復(fù)系統(tǒng)資源進(jìn)行IIS資源使用的靈活定制。打開(kāi)“IIS 管理控制臺(tái)”,單擊“+”號(hào)依次“展開(kāi)本地計(jì)算機(jī)→應(yīng)用程序池”。選擇你要回收的應(yīng)用程序池右鍵單擊選擇“屬性”,出現(xiàn)應(yīng)用程序池的屬性對(duì)話框,單擊“回收”選項(xiàng)卡在其下可以設(shè)置“進(jìn)程回收”、“內(nèi)存回收”等,所有這些設(shè)置大家根據(jù)實(shí)際需要進(jìn)行設(shè)置。(圖9)
總結(jié):通過(guò)上述IIS優(yōu)化措施,Web服務(wù)器就能輕裝上陣其性能將會(huì)有較大的提升。當(dāng)然,要從根本上改善Web性能,僅僅進(jìn)行軟設(shè)置是不夠的。另外,還需要進(jìn)行硬件改造,軟硬結(jié)合才是最完美的解決方案。
管理互聯(lián)網(wǎng)信息服務(wù)器(Internet Information Server,IIS)大家都知道,它是一個(gè)既簡(jiǎn)單而又麻煩的東西,簡(jiǎn)單的是安裝它幾乎不需要費(fèi)什么腦筋,選擇一下路徑,然后一路按“下一步”就可以完成;配置也比較簡(jiǎn)單,只要有一定的NT和網(wǎng)絡(luò)知識(shí),照著說(shuō)明書(shū)就可以架設(shè)一個(gè)像模像樣的Web站點(diǎn)出來(lái)。然而管理IIS卻沒(méi)有想像的那樣簡(jiǎn)單。使用一段時(shí)間以后,管理員往往會(huì)遇上服務(wù)器性能不良的情況。這時(shí)候,IIS的性能優(yōu)化,就尤為重要了。
導(dǎo)致IIS服務(wù)性能不良的原因有兩個(gè)方面。一個(gè)是人為的,也就是說(shuō)管理員在安裝、配置IIS的時(shí)候沒(méi)有進(jìn)行優(yōu)化或者配置錯(cuò)誤。另一個(gè)則是客觀上的,隨著運(yùn)行的服務(wù)種類,以及訪問(wèn)人數(shù)的增加,服務(wù)器原有的硬件配置已不能滿足要求了,這就需要提高硬件配置。
在服務(wù)器配置上優(yōu)化IIS性能
1.IIS高速緩存是對(duì)IIS進(jìn)行優(yōu)化時(shí)要考慮的最重要的項(xiàng)目之一。服務(wù)器保留了一部分內(nèi)存空間用作IIS高速緩存,為將來(lái)的請(qǐng)求存儲(chǔ)對(duì)象,這樣IIS就可從高速緩存中檢索對(duì)象而不用從硬盤(pán)中檢索。
調(diào)整IIS高速緩存的容量需要修改注冊(cè)表,表項(xiàng)如下:
\HKEY_LOCAL_MACHINE
\System
\CurrentControlSet
\Services
\InetInfo
\Parameters
\MemoryCacheSize
MemoryCacheSize的范圍是從0道4GB,缺省值為3072000(3MB)。
IIS通過(guò)高速緩存系統(tǒng)句柄、目錄列表以及其他常用數(shù)據(jù)的值來(lái)提高系統(tǒng)的性能。這個(gè)參數(shù)指明了分配給高速緩存的內(nèi)存大小。如果該值為0,那就意味著 “不進(jìn)行任何高速緩存”。在這種情況下系統(tǒng)的性能可能會(huì)降低。如果你的服務(wù)器網(wǎng)絡(luò)通訊繁忙,并且有足夠的內(nèi)存空間,可以考慮增大該值。必須注意的是修改注冊(cè)表后,需要重新啟動(dòng)才能使新值生效。
2.使IIS使用處理器時(shí)間最長(zhǎng)。服務(wù)器的CPU處理器能力總是有限的。哪一個(gè)應(yīng)用程序占用處理器的時(shí)間最長(zhǎng),誰(shuí)的性能就能得到最大的提高。
?。?)在NT的控制面板中,雙擊系統(tǒng)圖標(biāo)。
?。?)單擊性能標(biāo)簽。
(3)在應(yīng)用程序性能下將游標(biāo)拖到None的位置,這樣就可以使所有正在運(yùn)行的服務(wù),包括IIS,使用處理器的時(shí)間達(dá)到最大值。
3.服務(wù)器屬性設(shè)置。在服務(wù)器屬性里有一項(xiàng)可以使網(wǎng)絡(luò)應(yīng)用程序的總處理能力最大的選項(xiàng),你當(dāng)然應(yīng)該選擇它。
(1)在桌面上右鍵單擊網(wǎng)絡(luò)鄰居圖標(biāo),然后選擇屬性選項(xiàng)。
(2)單擊“服務(wù)標(biāo)簽”。
(3)單擊“服務(wù)器”,然后按“屬性”。
(4)選擇最大化網(wǎng)絡(luò)應(yīng)用程序的總處理能力。然后單擊“OK?!?
提高硬件配置來(lái)優(yōu)化IIS性能
當(dāng)進(jìn)行了上述的優(yōu)化配置,IIS的性能仍然沒(méi)有什么明顯改善的話,也許你應(yīng)該考慮提高服務(wù)器配置了。如升級(jí)處理器,增加硬盤(pán),升級(jí)網(wǎng)卡,增加內(nèi)存等。
優(yōu)化IIS的注意事項(xiàng)
為了避免以后的頭疼,在安裝IIS之時(shí)就應(yīng)該注意到IIS的優(yōu)化。比如:
1.為了提高性能和節(jié)約資源,應(yīng)該只運(yùn)行需要的協(xié)議。這一點(diǎn)很多管理員都沒(méi)有注意,筆者曾見(jiàn)到在一臺(tái)只作Web服務(wù)的機(jī)器上同時(shí)安裝有NetBEUI、Tcp/IP和IPX協(xié)議。顯然這是不合理的。
2.應(yīng)該將IIS服務(wù)器,設(shè)置為獨(dú)立的服務(wù)器,不要讓服務(wù)器去承受域控制器要求的額外負(fù)荷。試想:服務(wù)器一邊在響應(yīng)用戶的登錄,一邊還要提供IIS服務(wù),性能能不下降嗎?
3.可以把NT服務(wù)器的頁(yè)交換文件分布到多個(gè)物理磁盤(pán)上,注意是多個(gè)“物理磁盤(pán)”,分布在多個(gè)分區(qū)上是無(wú)效的。另外,不要將頁(yè)交換文件放在與WIndows NT引導(dǎo)區(qū)相同的分區(qū)中。
4.使用磁盤(pán)鏡像或磁盤(pán)帶區(qū)集可以提高磁盤(pán)的讀取性能。
5.關(guān)于日志的記錄,應(yīng)該采用文件記錄而不是記錄到ODBC數(shù)據(jù)源。此外,還可以在記錄期間增加用來(lái)記錄日志的內(nèi)存緩沖區(qū)的容量來(lái)減少磁盤(pán)的活動(dòng)。該緩沖區(qū)的缺省容量值為64KB。
6.最好把所有的數(shù)據(jù)都儲(chǔ)存在一個(gè)單獨(dú)的分區(qū)里。然后定期運(yùn)行磁盤(pán)碎片整理程序以保證在存儲(chǔ)Web服務(wù)器數(shù)據(jù)的分區(qū)中沒(méi)有碎片。使用NTFS有助于減少碎片。筆者推薦使用Norton的Speeddisk,可以很快地整理NTFS分區(qū)。
7.雖然SSL可以提供相當(dāng)可靠的加密傳輸。但是所需的額外開(kāi)銷會(huì)導(dǎo)致IIS服務(wù)器速度下降,尤其是在處理大型文件的時(shí)候。所以應(yīng)該只對(duì)確實(shí)需要保護(hù)的目錄進(jìn)行SSL加密。