2011-04-26 66 views
2

我已經在那裏我們在HttpRuntime.Cache爲選擇操作存儲數據集ONLY(產品總數〜數據的20MB如果數據集保存爲XML)的應用程序。Web應用程序的內存使用情況HttpRuntime.Cache

我們遷移到新的Windows 2008服務器的x64,其中已啓用IIS站點基於輸出緩存。 我們的應用程序池也設置爲x64模式。 一切順利,應用程序正在運行一些嚴重的負載和約2GB的內存使用情況。

在不改變應用程序,並沒有額外的流量,應用程序開始吃了服務器上的所有內存,這是目前7GB。

我試圖禁用輸出緩存,但它根本沒有幫助。解決該問題的唯一方法是回收應用程序池,但此解決方案會導致所有用戶會話丟失。

在我的理解,HttpRuntime.Cache項目是全球應用程序池。 我們只是在應用程序加載事件中將項目插入到緩存中,因此應該不會對緩存項目進行任何更改。

隨着禁用輸出緩存並沒有額外插入到緩存中,哪些可能會導致意外的內存增長?

+0

你檢查任務管理器(性能 - >資源監視器),看看有什麼吃了內存(讓你確信它是不是SQL保存內存)?數據庫是否在同一臺服務器上運行?內存正在使用還是待機? – Ivo 2011-04-26 14:33:47

+0

嗨,數據集通過WebServices填充,此設置上沒有數據庫服務器。內存應該被使用,因爲它不斷增長 - 5-20MB/s,CPU使用率爲5-12%,直到達到設定的7GB回收限制。 – balint 2011-04-26 14:44:07

回答

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

您也可以嘗試配置您的開發服務器上的應用程序內存,看看問題是否會出現在那裏。

相關問題