Практическое правило для определения объема используемой памяти, необходимого для перезагрузки рабочего процесса? - PullRequest
1 голос
/ 10 мая 2009

У меня есть кодовая база с большим количеством этого:

byte[] contents = FileUtils.FileToByteArray(FileOfGartantuanProportions);

Я не управляю своим сервером IIS, поэтому я не вижу системный журнал или не выполняю инструментарий, я просто вижу, что мой запрос не возвращается (белая страница смерти) и иногда YSOD с ошибкой Out of Memory.

Есть ли у кого-нибудь эмпирическое правило о том, какое количество данных вы можете загрузить в память до того, как IIS5 или IIS6 уничтожат рабочий процесс или просто перевернутся и умрут?

Или, еще лучше, есть вызов API, который я сделал, что-то вроде:

  if(!IsEnoughMemoryFor(FileOfGartantuanProportion.Length)) throw new SomeException() ;

На моей рабочей станции XP Pro я могу получить страницу ASP.NET, чтобы успешно обрабатывать очень большой байтовый массив в памяти, но эти результаты, очевидно, не были применимы к реальному общему серверу.

Ответы [ 3 ]

1 голос
/ 30 мая 2009

Для IIS 6 вы, вероятно, столкнетесь с пределами перезапуска памяти PeriodicRestartPrivateMemory и PeriodicRestartMemory. Я думаю, что на XP это 60% физической памяти. По крайней мере, это то, что я помню о asp.net 1.1, я не уверен насчет 2.0

YSOD, вероятно, лучше всего обрабатывать с помощью try / catch для больших выделений.

1 голос
/ 31 мая 2009

Согласно докладу Тесс Феррандез на TechEd, вы можете начать видеть исключения нехватки памяти на 32-битном сервере, когда у вас есть около 800 МБ в частных байтах или 1,4 ГБ в виртуальных байтах.

У нее также был хороший пост о том, почему это здесь:

Аналогия с рестораном

Другие замечания, которые она высказала, включали размышления о том, что вы сериализуете в сеанс - например, сериализация набора данных объемом 1 МБ может привести к тому, что на каждой странице сервера будет использоваться 15-20 МБ памяти, поскольку эти данные сериализуются и десериализуются. *

1 голос
/ 30 мая 2009

В IIS6 в основном режиме вы можете настроить ограничения для каждого пула приложений.

В IIS5 он настраивается с использованием элемента machine.config в процентах от общей системной памяти - по умолчанию это 60%.

...