繁体   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