簡體   English   中英

如何在ASP.NET緩存應用程序中超過IIS7的60%內存限制

[英]How can I exceed the 60% Memory Limit of IIS7 in ASP.NET Caching application

請原諒,如果這是更多的服務器故障與stackoverflow。 它似乎在邊境。

我們有一個應用程序,它使用ASP.NET緩存為電子商務應用程序緩存大量產品數據。 這是一個包含65K元素的字典對象,我們的計算將對象的大小設置為~10GB。
問題:

  1. 對象消耗的內存量似乎遠遠超過我們的10GB計算量。

  2. 最大的關注:我們似乎無法使用服務器中超過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的截圖。

http://www.freeimagehosting.net/image.php?7a42144e03.jpg

有點晚了,但我有幾乎相同的問題。 processModel上memoryLimit設置的問題在於它盡管沒有被記錄,但似乎沒有任何效果。

percentagePhysicalMemoryUsedLimit同樣看起來應該做某事但沒有效果。

privateBytesLimit="20000000000" 確實有效。 我去調試了進程並找到了CacheMemorySizePressure對象,它成功獲取了值並將其設置為_memoryLimit。 我會仔細檢查一下。

另一個選項是在IIS應用程序池上設置“專用內存使用”回收閾值。 這也應該被拿起並覆蓋默認的60%限制。

第三種選擇是使用新的MemoryCache類並在其上設置PhysicalMemoryLimit

您是否考慮過使用不同的緩存策略? 內置緩存並不是所有功能豐富,你將很難讓它做更多(除非一些IIS專家有一些聰明的工作)。

我們花了很多時間研究這個並放棄了。 我們實際上使用較薄的對象存儲在緩存中,並根據需要獲得更豐富的對象。

當我們需要考慮這個問題時,我們調查了Memcached和Velocity,但現在還沒有進行部署。 它們功能更豐富。

另外,如何通過代碼將項目存儲在緩存中? 您是在申請開始時還是在第一次申請之后將它們放在那里? 我問的原因是你的緩存鍵是否有效,實際上你是一遍又一遍地填充緩存而不是檢索任何東西(這可能只是一種對象類型的情況)。 例如,我們設法通過將時間附加到特定於日期的緩存鍵來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM