Использование памяти веб-приложения с помощью HttpRuntime.Cache - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть приложение, в котором мы храним наборы данных в HttpRuntime.Cache ТОЛЬКО для операций выбора (всего ~ 20 МБ данных, если набор данных сохраняется в формате xml).

Мы мигрировали на новый сервер Windows 2008 x64где IIS на основе сайта Кэширование вывода было включено.Наш пул приложений также настроен на режим x64.Все прошло хорошо, приложение работало с серьезной нагрузкой и около 2 ГБ памяти.

Без изменений в приложении и без дополнительного трафика приложение начало поглощать всю память на сервере, которая в настоящее время составляет 7 ГБ.

Я попытался отключить кэширование вывода,но это совсем не помогло.Единственный способ решить эту проблему - перезапустить пул приложений, но это решение приводит к потере всех пользовательских сессий.

В моем понимании элементы HttpRuntime.Cache являются глобальными для пула приложений.Мы только вставляем элементы в кэш при событии загрузки приложения, поэтому никаких изменений в элементах кэша не должно быть.

При отключенном кэшировании вывода и без дополнительных вставок в кэш, что может привести кнеожиданный рост памяти?

1 Ответ

1 голос
/ 20 мая 2011

Это звучит как проблема с кучей больших объектов.Начиная с версии 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-big-object-heap /
http://www.alexatnet.com/content/net-memory-management-and-garbage-collector

Вы также можете попробовать профилировать память приложения на сервере разработки, чтобы увидеть, не возникнет ли там проблема.

...