w3wp.exe 佔用記憶體
在 Small Business Server 2011 安裝中,大量 w3wp.exe 程序似乎使用了不成比例的大量記憶體。SBS 開箱即用安裝共有 7 個站點和 20 個 ASP.NET 應用程序池(Sharepoint、Exchange、WSUS 和 SBS 特定的東西,如遠端工作網站)。
隨著時間的推移,產生的十幾個 w3wp.exe 程序往往會消耗超過 4 GB 的伺服器記憶體,峰值應用程序池是屬於 WSUS 的一個,工作集中大約有 800 MB。通過 IIS MMC 手動回收應用程序池有助於暫時減少記憶體使用量(w3wp.exe 程序縮小到 10 MB,其中一些程序快速重新增長),但顯然不是管理員想要整天做的事情。我找不到任何關於自動回收 SBS 預安裝的應用程序池的建議,所以我有點不願意在生產系統上“只做”。
我在網上關於如何限制這一點的研究僅引發了一些文章,指出 w3wp 記憶體消耗不會損害性能,但會提高性能,因為記憶體將“在其他應用程序需要時釋放”。問題是它不起作用:
- 一方面,SBS 是一個多角色伺服器,其中一個角色(主要角色)是 CIFS 網路儲存,它極大地受益於文件系統記憶體,它再次依賴於“空閒”記憶體,就像“任何其他程序都沒有使用”一樣方式” - ASP.NET 應用程序池幾乎看不到使用者並佔用記憶體會適得其反
- 另一件事是,我仍然必須看到 w3wp 實例在記憶體短缺時記憶體消耗的顯著減少——我看到的是顯著小於 100 mb 的小幅減少和過度交換——再次損害了性能
我幾乎從不管理 IIS 或 ASP.NET 應用程序,因此歡迎任何關於如何有效削減應用程序池記憶體需求的想法。
這就是我最終做的事情:
按照此答案中的建議,通過
web.config
在 at中設置 privateBytesLimit 參數,將 .NET AppPools 的伺服器應用程序記憶體設置為較低的值(5 MB):%WINDIR%\Microsoft.NET\Framework\<version>\Config
<configuration> <system.web> <caching> <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" /> </caching> </system.web> </configuration>
這有助於使用預設池回收設置將記憶體使用量減少到 1 GB 以上。
顯然,使用“伺服器”類型的垃圾收集器 (
<gcServer = "true">
)也會導致大量記憶體消耗,但看起來<gcServer>
預設設置為 false。
歡迎來到 SBS 的精彩世界。RAM = 10GB 的推薦要求…並且至少需要 8GB。(根據微軟的說法。)有充分的理由。這不是一台精心調校的潤滑良好的機器……它非常邋遢、臃腫,並且把所有東西都捆綁在一起。你可以在那個盒子上扔的記憶體越多……越好。不幸的是,您的最大限制為 32gb。哪個恕我直言……很愚蠢。