w3wp.exe占用CPU和內(nèi)存高的問題
WINDOWS2003 IIS6下,經(jīng)常出現(xiàn)w3wp的內(nèi)存占用不能及時釋放,從而導(dǎo)致服務(wù)器響應(yīng)速度很慢。
實際案例
服務(wù)器配置
至強2.8G
內(nèi)存512M
SCSI硬盤 2塊 (軟鏡像)
系統(tǒng) windows 2003
現(xiàn)在掛了一個asp.net開發(fā)的網(wǎng)站,訪問量不大 但是出現(xiàn)一個,問題就是每當(dāng)服務(wù)器運行2-3天后,訪問網(wǎng)站就特別慢,重啟動服務(wù)器后就正常了。
查看進程使用內(nèi)存的情況,發(fā)現(xiàn)w3wp.exe和sqlservr.exe進程占用內(nèi)存相當(dāng)大 達到了170多M( 每個),物理可用內(nèi)存幾乎用光,(服務(wù)器重啟動時 占用的內(nèi)存很小才40多M 每個),以前網(wǎng)站掛在一個虛擬機上,數(shù)據(jù)庫是分開掛的,從沒出現(xiàn)這種情況。
后來,原版移植到新服務(wù)器上就出現(xiàn)這樣的問題
還個一問題就是在SQL企業(yè)管理器中查看SQL進程發(fā)現(xiàn)有很多是.net 引起的進程是sleeping但是卻占用了內(nèi)存無法釋放
采取措施:
IIS服務(wù)管理器----》應(yīng)用程序池----》添加你的應(yīng)用,并設(shè)置最大內(nèi)存,當(dāng)程序達到最大內(nèi)存后其會自動重啟。
將內(nèi)存升級至2G,訪問量比較高,一般是差不多運行24小時后就得重啟,內(nèi)存沒耗完,W3WP進程占到一百八九十兆,SQL占了二百多兆時就得重啟,不然整個站點就宕了。
解決方法一:
w3wp.exe就是你的ASP.NET應(yīng)用宿主,如果你使用了大量的Session、Cache等資源,并且Session超市時間很長,那么內(nèi)存占用量就比較大。應(yīng)用池是為增加性能而設(shè)的一個特性,但是也消耗很大的內(nèi)存。另外關(guān)掉Windows Server 2003里的大多數(shù)Service(那個不用都可以關(guān)掉),也可以節(jié)省一部分內(nèi)存
1.懷疑在程序中應(yīng)用的CACHE,
2.CACHE中有大量的數(shù)據(jù)
3.頻繁刷新CACHE
4.沒有設(shè)計好CACHE的方式
解決方法二:
跟蹤下SQL的調(diào)用記錄,在每次往CACHE或SESSION寫入大量數(shù)據(jù)時記錄一下時間,看是否太過頻繁
1.在win2003里asp.net的進程就是w3wp.exe
2.512M內(nèi)存?zhèn)€人用是夠用了,但是放在服務(wù)器上就有點不夠用了,尤其是win2003 asp.net sql server 。尤其是sql server 他是很吃內(nèi)存的,如果不控制的話,他會占光所有的物理內(nèi)存(只剩下幾十M 倒 100M 吧)。win2003 本身就要占用150M左右。也就剩不下什么了。
3.優(yōu)化asp.net程序,就向樓上的說的那樣,少用或不用session cache application之類的東西,再有就是是不是有翻頁的地方,翻頁處理不好也是會占很多內(nèi)存的。
4.限制sql的內(nèi)存。企業(yè)管理器——SQL的屬性(一般是local)——“內(nèi)存”標(biāo)簽。在這里看內(nèi)存的設(shè)置,把最大值改成100M。
解決方法三:
研究了一下,可以做以下配置:
1、在IIS中對每個網(wǎng)站進行單獨的應(yīng)用程序池配置。即互相之間不影響。
2、設(shè)置應(yīng)用程序池的回收時間,默認(rèn)為1720小時,可以根據(jù)情況修改。同時,設(shè)置同時運行的w3wp進程數(shù)目為1。再設(shè)置當(dāng)內(nèi)存或者cpu占用超過多少,就自動回收內(nèi)存
一般來說,這樣就可以解決了。但仍然會出現(xiàn)個別網(wǎng)站因為程序問題,不能正確釋放。
那么,怎么樣才能找到是哪一個網(wǎng)站的?
1、在任務(wù)管理器中增加顯示pid字段。就可以看到占用內(nèi)存或者cpu最高的進程pid
2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然后再次運行就可以了。這樣就可以看到pid對應(yīng)的應(yīng)用程序池
3、到iis中察看該應(yīng)用程序池對應(yīng)的網(wǎng)站,就ok了。
解決方法四:
建義2003系統(tǒng)安裝至少1G內(nèi)存。
w3wp.exe是2003下的一個iis進程,至于sql占用內(nèi)存,那有可能是因為你的sql沒有設(shè)置占用內(nèi)存上限
在IIS6下,經(jīng)常出現(xiàn)w3wp.exe的內(nèi)存及CPU占用不能及時釋放,從而導(dǎo)致服務(wù)器響應(yīng)速度很慢。
解決內(nèi)存占用過多,可以做以下配置:
1、在IIS中對每個網(wǎng)站進行單獨的應(yīng)用程序池配置。即互相之間不影響。
2、設(shè)置應(yīng)用程序池的回收時間,默認(rèn)為1720小時,可以根據(jù)情況修改。再設(shè)置當(dāng)內(nèi)存占用超過多少(如500M),就自動回收內(nèi)存。
解決CPU占用過多:
1、在IIS中對每個網(wǎng)站進行單獨的應(yīng)用程序池配置。即互相之間不影響。
2、設(shè)置應(yīng)用程序池的CPUjian視,不超過25%(服務(wù)器為4CPU),每分鐘刷新,超過限制時關(guān)閉。
根據(jù)w3wp取得是那個一個應(yīng)用程序池:
1、在任務(wù)管理器中增加顯示pid字段。就可以看到占用內(nèi)存或者cpu最高的進程pid
2、在命令提示符下運行iisapp -a。注意,第一次運行,會提示沒有js支持,點擊確定。然后再次運行就可以了。這樣就可以看到pid對應(yīng)的應(yīng)用程序池。(iisapp實際上是存放在C:\windows\system32目錄下的一個VBS腳本,全名為iisapp.vbs,如果你和我一樣,也禁止了Vbs默認(rèn)關(guān)聯(lián)程序,那么就需要手動到該目錄,先擇打開方式,然后選“Microsoft (r) Windows Based Script Host”來執(zhí)行,就可以得到PID與應(yīng)用程序池的對應(yīng)關(guān)系。)
3、到iis中察看該應(yīng)用程序池對應(yīng)的網(wǎng)站,就ok了,做出上面的內(nèi)存或CPU方面的限制,或檢查程序有無死循環(huán)之類的問題。
關(guān)鍵詞:w3wp.exe,CPU,內(nèi)存
閱讀本文后您有什么感想? 已有 人給出評價!
- 1
- 1
- 1
- 1
- 1
- 1