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