【问题标题】:web application memory usage with HttpRuntime.Cache使用 HttpRuntime.Cache 的 Web 应用程序内存使用情况
【发布时间】:2012-03-08 04:34:58
【问题描述】:

我有一个应用程序,我们将数据集存储在 HttpRuntime.Cache 中,仅用于选择操作(如果数据集保存为 xml,则总共有大约 20MB 的数据)。

我们迁移到新的 Windows 2008 服务器 x64,其中启用了基于 IIS 站点的输出缓存。 我们的应用程序池也设置为 x64 模式。 一切顺利,应用程序运行时负载很大,内存使用量约为 2GB。

由于没有对应用程序进行任何更改,也没有额外的流量,应用程序开始占用服务器上的所有内存,目前是 7GB。

我尝试禁用输出缓存,但它根本没有帮助。解决该问题的唯一方法是回收应用程序池,但这种解决方案会导致所有用户会话丢失。

据我了解,HttpRuntime.Cache 项目对于应用程序池来说是全局的。 我们只是在 Application Load 事件中将项目插入到缓存中,因此缓存项目应该没有任何变化。

在禁用输出缓存且没有额外插入缓存的情况下,什么会导致意外的内存增长?

【问题讨论】:

  • 您是否检查了任务管理器(性能-> 资源监视器)以查看是什么占用了内存(以便您确定不是 sql 占用了内存)?数据库是否在同一台服务器上运行?内存是在使用还是待机?
  • 您好,数据集是通过 WebServices 填充的,此设置中没有数据库服务器。内存应该正在使用中,因为它会不断增长 - 5-20MB/s,CPU 使用率为 5-12%,直到达到设置的 7GB 回收限制。

标签: asp.net asp.net-mvc caching outputcache


【解决方案1】:

这听起来像是大对象堆的问题。自 1.0 版以来,.NET 垃圾收集器因无法从内存中收集大对象而臭名昭著。 .net 版本的情况有所改善,但特别是在高负载服务器上仍然存在问题。 查看这些文章以了解该问题:

http://msdn.microsoft.com/en-us/magazine/cc534993.aspx
http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/
http://www.alexatnet.com/content/net-memory-management-and-garbage-collector

您还可以尝试分析您的开发服务器上的应用程序内存,以查看问题是否会出现在那里。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2014-11-08
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多