如果這是更多的serverfault與stackoverflow,請諒解。它似乎在邊界上。如何超過ASP.NET緩存應用程序中IIS7的60%內存限制
我們有一個應用程序可以緩存使用ASP.NET緩存的電子商務應用程序的大量產品數據。這是一個包含65K元素的字典對象,我們的計算將對象的大小設置爲〜10GB。
問題:
的內存中的對象消耗的量似乎是遠遠超過我們的10GB的計算。
最大的問題:我們似乎無法使用服務器中超過60%的32GB。
我們試過到目前爲止:
在machine.config中/ System.Web程序(SF不允許的標籤,原諒的格式):
processModel autoConfig="true" memoryLimit="80"
在web.config/system.web/caching/cache(sf不允許標籤,請原諒格式):
privateBytesLimit = "20000000000" (and 0, the default of course)
percentagePhysicalMemoryUsedLimit = "90"
環境: 的Windows 2008 R2 x64的 32GB RAM IIS7
似乎沒有什麼可以讓我們超過60%的價值。 查看taskman的截圖。
http://www.freeimagehosting.net/image.php?7a42144e03.jpg
有根據的猜測:服務器正在重新調整其內存以適應增加的工作負載,使用更多的交換文件進行補償或更快地收集內存。類似的東西。 Taskman中的Performance選項卡看起來像什麼樣,當你加載負載?交換文件的大小是否增加? – 2010-06-11 03:31:12
@Robert:Swap保持非常平坦(這是合理的,因爲它是一個內存緩存)。值得檢查。 @all: 我想知道單個對象的純粹尺寸是否是問題。 GC是否需要一定量的「鬆弛空間」來移動物體並且這個_one_對象超出了這個範圍? – evilknot 2010-06-11 03:52:30
你是否交換對象進出字典?如果是的話,那可能會給GC帶來壓力,因爲每次交換都會釋放一個必須在某個點處理的對象。 GC可能不會等待您在執行收集之前耗盡內存。一些內存分析可能是按順序的。 – 2010-06-11 04:28:28