IIS7 Windows 2008 R2 w3wp.exe не освобождает память - PullRequest
0 голосов
/ 24 апреля 2018

Итак, мы запускаем веб-службу ASP.NET на производственном сервере Windows 2008 R2 с IIS 7 с последними обновлениями. В последнее время мы заметили, что было высокое потребление памяти.

После реализации методов удаления мусора память, кажется, находится под большим контролем. Однако когда пул приложений (w3wp.exe) перезагружается по истечении указанного времени, память, которую он занимал до этого момента, не высвобождается обратно в систему. Если мы перезапускаем вручную, то наблюдаются те же явления, и память, израсходованная до этого момента, кажется потерянной.

Новый экземпляр w3wp.exe виден в диспетчере задач с низким использованием памяти на несколько сотен МБ, но системная память продолжает расти до необоснованных уровней.

У нас есть сервер на 32 гигабайта, и в течение нескольких дней он достигает 20-25 ГБ используемой памяти, и машина становится вялой. Кажется, работает только полная перезагрузка Windows.

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

DebugDiag не сообщает ничего ненормального даже после больших сканирований. Также не удалось получить дампы стека из DebugDiag.

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 25 апреля 2018

Не могли бы вы указать, о какой памяти вы говорите.Если это виртуальная память, то она не зависит от оперативной памяти.

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

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

Например, 32-разрядное приложение на 32-разрядной машине может сканировать до 4 ГБ виртуальной памяти (2 ГБ в режиме пользователя и 2 ГБ в режиме ядра).32-разрядное приложение на 64-разрядной машине может сканировать до 8 ГБ (режим пользователя 4 ГБ и режим ядра 4 ГБ).64-разрядное приложение на 64-разрядной машине может сканировать до 8 ТБ (режим пользователя 4 ТБ и режим ядра 4 ТБ).И это полностью не зависит от вашей оперативной памяти.

Для вашей ситуации, некоторые вещи, которые вы можете попробовать.

  1. Отключите все сторонние службы и проверьте поведение.
  2. Наблюдайте за компонентом (процессом), который занимает наивысшую память, когда вся система находится в верхней области памяти
  3. Захват perfmon, чтобы понять, что именно происходит внутри.
  4. Я думаю, вам, возможно, придется принятьдамп всей системы, а затем определить, что происходит.(Я не эксперт в этом)

Пожалуйста, дайте мне знать, если у вас есть какие-либо дополнительные вопросы.

...