Как я могу превысить 60% -ый лимит памяти IIS7 в приложении кэширования ASP.NET - PullRequest
6 голосов
/ 11 июня 2010

Простите, если это больше сбоя сервера по сравнению со стековым потоком. Кажется, на границе.

У нас есть приложение, которое кэширует большой объем данных о продукте для приложения электронной коммерции, использующего кэширование ASP.NET. Это объект словаря с элементами из 65 КБ, и в наших расчетах размер объекта составляет ~ 10 ГБ.
Проблема:

  1. Объем памяти, который потребляет объект, по-видимому, намного превышает наш расчет в 10 ГБ.

  2. БОЛЬШОЙ КОНЦЕРН: Мы не можем использовать более 60% 32 ГБ на сервере.

То, что мы пробовали до сих пор:

В 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 32 ГБ ОЗУ IIS7

Ничто, кажется, не позволяет нам превысить значение 60%. Смотрите скриншот задачи.

http://www.freeimagehosting.net/image.php?7a42144e03.jpg

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Немного поздно, но у меня почти такая же проблема.Проблема с параметром memoryLimit в processModel заключается в том, что он, похоже, не имеет никакого эффекта, несмотря на то, что он задокументирован как таковой.

percentagePhysicalMemoryUsedLimit похоже, что он должен что-то делать, но не имеет никакого эффекта.

privateBytesLimit="20000000000" работает , хотя.Я пошел и отладил процесс и нашел объект CacheMemorySizePressure, и он успешно поднял значение и установил для него значение _memoryLimit.Я бы дважды проверил это.

Другой вариант - установить порог перезапуска использования частной памяти в пуле приложений IIS.Это также должно быть выбрано и переопределить ограничение 60% по умолчанию.

Третий вариант - использовать новый класс MemoryCache и установить для него PhysicalMemoryLimit.

1 голос
/ 11 июня 2010

Рассматривали ли вы использовать другую стратегию кэширования?Встроенное кэширование - это не все, что имеет богатый набор функций, и вам будет сложно заставить его делать гораздо больше (если только у некоторых гуру IIS нет какой-то умной работы).вверх.На самом деле мы используем более тонкие объекты для хранения в кэше и получения более полных объектов по мере необходимости.

Когда нам нужно было обдумать это, мы исследовали Memcached и Velocity, но отступили от их развертывания.Хотя они более многофункциональны.

Кроме того, как вы храните элементы в кеше с помощью кода?Вы помещаете их туда при запуске приложения или после первого запроса для каждого?Я спрашиваю, почему ваши ключи кеша эффективны и что вы на самом деле заполняете кеш снова и снова и ничего не получаете (это может быть только один тип объекта).Нам удалось сделать это один раз, добавив время, например, к кешированному ключу даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...