![](/img/trans.png)
[英]Where can I learn how to deploy ASP.NET 4 MVC 2 applications to IIS7?
[英]How can I exceed the 60% Memory Limit of IIS7 in ASP.NET Caching application
請原諒,如果這是更多的服務器故障與stackoverflow。 它似乎在邊境。
我們有一個應用程序,它使用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 2008R2 x64 32GB RAM IIS7
似乎沒有什么能讓我們超過60%的價值。 查看taskman的截圖。
有點晚了,但我有幾乎相同的問題。 processModel上memoryLimit
設置的問題在於它盡管沒有被記錄,但似乎沒有任何效果。
percentagePhysicalMemoryUsedLimit
同樣看起來應該做某事但沒有效果。
privateBytesLimit="20000000000"
確實有效。 我去調試了進程並找到了CacheMemorySizePressure對象,它成功獲取了值並將其設置為_memoryLimit。 我會仔細檢查一下。
另一個選項是在IIS應用程序池上設置“專用內存使用”回收閾值。 這也應該被拿起並覆蓋默認的60%限制。
第三種選擇是使用新的MemoryCache
類並在其上設置PhysicalMemoryLimit
。
您是否考慮過使用不同的緩存策略? 內置緩存並不是所有功能豐富,你將很難讓它做更多(除非一些IIS專家有一些聰明的工作)。
我們花了很多時間研究這個並放棄了。 我們實際上使用較薄的對象存儲在緩存中,並根據需要獲得更豐富的對象。
當我們需要考慮這個問題時,我們調查了Memcached和Velocity,但現在還沒有進行部署。 它們功能更豐富。
另外,如何通過代碼將項目存儲在緩存中? 您是在申請開始時還是在第一次申請之后將它們放在那里? 我問的原因是你的緩存鍵是否有效,實際上你是一遍又一遍地填充緩存而不是檢索任何東西(這可能只是一種對象類型的情況)。 例如,我們設法通過將時間附加到特定於日期的緩存鍵來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.