Windows 2008 R2 IIS рабочий процесс увеличения использования памяти

У меня есть этот веб-сайт, написанный на C#. около 400-500 пользователей онлайн в любое время. Он был на 32-битной машине Windows 2008 раньше и никогда не блокировался / не замедлялся из-за увеличения потребления памяти до тех пор, пока я не обновил его сервер до версии 2008 r2 64 бит.

Старый сервер имел только 4 ГБ оперативной памяти и четырехъядерный процессор на 2 ГГц. сайт работал просто отлично. так как я обновил сервер, который заметил (2 раза за 10 дней), он начал есть оперативную память. Прошлой ночью это поднялось до 4 ГБ оперативной памяти. с увеличением оперативной памяти отклик довольно сильно замедляется. утилизация пула приложений не помогает. Я должен перезапустить его рабочий процесс для восстановления.

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

кто-нибудь сталкивался с чем-то подобным?

То же самое происходит, если я создаю непрерывные ошибки с классическим ASP.

Спасибо

2 ответа

Прежде всего, в качестве общего предложения, если ваше приложение определенно не нуждается в 64-битной адресации, запустите его в 32-битном пуле приложений. Это естественно ограничивает использование памяти до 4 ГБ на процесс.

Почему это может быть важно? Ну, потому что 4 ГБ для 64-битного приложения - ошибка округления! Если.Net Framework не чувствует, что находится под давлением памяти, он может не беспокоиться о выполнении сборки мусора. Это не очень хороший ответ, и я не знаю, почему так будет в случае R2, а не R1, за исключением возможного ответа на объем памяти.

On Recycling: Recycling должен создать новый рабочий процесс при следующем запросе и по умолчанию дает старому до 90 секунд для завершения - утилизация перезапускает рабочий процесс (или, по крайней мере, говорит WAS запустить новый WP в следующий раз, когда запрос приходит, и вежливо сообщает последнему WP, что он перерабатывается). Если перекрывающаяся переработка не отключена, вы должны увидеть новый w3wp с новым PID, как только будет получен следующий запрос для этого сайта.

Если вы все еще видите утечку в 32-разрядном пуле приложений, вам необходимо устранить ее как утечку памяти - рассмотрите возможность создания дампа памяти процесса, когда он находится в состоянии высокой памяти, а затем посмотрите на его отладку с sos.dll или psscor2.dll, чтобы найти основного потребителя памяти.

Я мог бы найти причину. Я не знаю, почему это не произошло на iis7 или 6, но что происходит, это.

Это происходит, если для страниц ошибок iis/asp.net задана динамическая страница, такая как 500.aspx, 404.aspx, а ошибка распространяется на весь сайт, поэтому каждый запрос получает одну и ту же ошибку. Похоже, что из-за блокировки сеанса iis ожидает завершения до завершения, а затем обрабатывает страницу с динамическими ошибками и ставит в очередь ваш запрос. по мере увеличения количества запросов увеличивается память.

Другие вопросы по тегам