Рабочий процесс перезагружается, потому что он достиг своего предела виртуальной памяти - PullRequest
9 голосов
/ 19 декабря 2008

Мы размещаем довольно большой (самостоятельно написанный) сайт ASP.NET для наших клиентов. Он состоит из веб-службы, веб-сайта и веб-сайта, обслуживающего изображения, и все они находятся в своем собственном виртуальном каталоге. Три виртуальных каталога находятся в одном пуле приложений. В пуле для обоих пределов памяти (максимальная виртуальная память и максимальная используемая память) установлено значение 500 мегабайт.

Тем не менее, пул приложений подвергается множеству повторений, даже если только один пользователь одновременно. Сообщение журнала событий говорит:

Рабочий процесс с идентификатором процесса "xxxx", обслуживающим пул приложений "xxxx", запросил повторную загрузку, поскольку достиг своего предела виртуальной памяти.

Тем не менее, наблюдение за рабочим процессом с помощью Process Explorer не показывает ничего, что поддерживает это сообщение. Какие счетчики я должен смотреть, чтобы наблюдать за памятью, которая фактически ограничена обеими настройками?

Обновление 1

Наблюдение за процессом в Диспетчере задач показывает «использование памяти» и «размер виртуальной машины» около 100 МБ, однако процесс повторяется с указанным выше сообщением. 5 ГБ физической памяти доступно на сервере ...

Обновление 2

Хотя веб-сайт довольно большой, проблема заключается в небольшой части приложения. Он выполняет запрос (используя Oracle) и привязывает результаты к сетевому контролю и ретранслятору. Результаты состоят из краткого описания и значка (загруженного через веб-сайт, обслуживающий изображения). Если я выполняю 10 поисковых действий друг за другом, каждое из которых дает 9 результатов, рабочий процесс показывает использование памяти и размер виртуальной машины около 100 МБ и перезапускается ...

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

Ответы [ 4 ]

1 голос
/ 19 декабря 2008

Так же, как наблюдение ... Если ваш сайт «обслуживания изображений» выполняет какую-либо встроенную обработку / генерацию изображений, вы можете быстро поглотить память, не вызывая Dispose() на каких-либо одноразовых ресурсах, особенно тех, которые содержат встроенные функции…

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

0 голосов
/ 16 августа 2017

У меня была такая же проблема с виртуальной машиной, когда мы увеличили объем памяти с 4 ГБ до 8 ГБ (как ни странно). Я нашел этот блог, в котором объясняется, что мы можем использовать «ограничение частной памяти», но не «ограничение виртуальной памяти» в 64-битной системе, потому что: «Если вы работаете на 64-битной платформе (и я), приложение ASP.NET активно резервирует виртуальную память». .

http://blog.walteralmeida.com/2011/07/iis7-private-memory-limit-versus-virtual-memory-limit.html

0 голосов
/ 19 декабря 2008

Это может быть полезной ссылкой:

http://blogs.msdn.com/tom/archive/2008/06/25/asp-net-tips-finding-what-is-taking-up-memory.aspx

(и более ранние посты, которые объясняют некоторый контекст тому, что он делает)

0 голосов
/ 19 декабря 2008

Попробуйте использовать диспетчер задач Windows. На вкладке процессов перейдите в меню «Вид» и выберите «Выбрать столбцы». Выберите столбец Размер виртуальной памяти и просмотрите значение рабочего процесса asp.net.

...