我已经在那里我们在HttpRuntime.Cache存储数据集用于选择操作只(产品总数〜数据的20MB如果数据集被保存为XML)的应用程序。
我们迁移到新的Windows 2008服务器x64,其中启用了基于IIS站点的输出缓存。 我们的应用程序池也设置为x64模式。 一切顺利,应用程序运行时有一些严重的负载和约2GB的内存使用量。
使用不改变该应用程序,没有额外的流量,应用程序开始吃在服务器上的所有存储器,其是目前7GB。
我试图禁用输出缓存,但它根本没有帮助。解决问题的唯一方法是回收应用程序池,但此解决方案会导致所有用户会话丢失。
据我了解,HttpRuntime.Cache项是应用程序池的全局项。 我们只是在Application Load事件中将项目插入缓存,因此不应对缓存项目进行任何更改。
使用禁用的输出缓存并且没有额外的缓存插入,可能导致意外的内存增长?
答案 0 :(得分: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
您还可以尝试在开发服务器上分析应用程序内存,以查看问题是否会出现在那里。