IIS7 Windows 2008 R2 w3wp.exe не освобождает память
Итак, мы запускаем веб-службу ASP.NET на производственном сервере Windows 2008 R2 с IIS 7 с последними обновлениями. В последнее время мы заметили, что было высокое потребление памяти.
После реализации методов удаления мусора, память, кажется, очень под контролем. Однако, когда пул приложений (w3wp.exe) перезагружается по истечении указанного времени, память, которую он занимал до этого момента, не высвобождается обратно в систему. Если мы перезапускаем вручную, то наблюдаются те же явления, и память, израсходованная до этого момента, кажется, теряется.
Новый экземпляр w3wp.exe виден в диспетчере задач с низким использованием памяти на несколько сотен МБ, но системная память продолжает расти до необоснованных уровней.
У нас есть сервер на 32 гигабайта, и в течение нескольких дней он достигает 20-25 ГБ используемой памяти, и машина становится вялой. Кажется, работает только полная перезагрузка Windows.
Любое понимание того, почему память не освобождается даже после завершения пула приложений, было бы полезно. Где мы можем посмотреть?
DebugDiag не говорит ничего ненормального даже после больших сканирований. Также не удалось получить дампы стека из DebugDiag.
Спасибо заранее за ваше время.
1 ответ
Не могли бы вы указать, о какой памяти вы говорите. Если это виртуальная память, то она не зависит от оперативной памяти.
Если вы наблюдаете высокую системную память, а не большую память w3wp после внесения изменений в код, то я не думаю, что проблема заключается в w3wp. Кроме того, так как перезагрузка сервера решает проблему, я не думаю, что здесь виноват w3wp.
Если вы предполагаете, что, когда пул приложений перезагружается, занятая им память может использоваться другим, это будет неправильно. Каждый процесс выполняется независимо и в своем собственном виртуальном пространстве.
Например, 32-разрядное приложение на 32-разрядной машине может сканировать до 4 ГБ виртуальной памяти ( 2 ГБ в режиме пользователя и 2 ГБ в режиме ядра). 32-разрядное приложение на 64-разрядной машине может сканировать до 8 ГБ (режим пользователя 4 ГБ и режим ядра 4 ГБ). 64-разрядное приложение на 64-разрядной машине может сканировать до 8 ТБ (режим пользователя 4 ТБ и режим ядра 4 ТБ). И это полностью не зависит от вашей оперативной памяти.
Для вашей ситуации, некоторые вещи, которые вы можете попробовать.
- Отключите все сторонние сервисы и проверьте поведение.
- Обратите внимание на компонент (процесс), который занимает наивысшую память, когда вся система находится на высокой памяти
- Захватите perfmon, чтобы понять, что именно происходит внутри.
- Я думаю, что вам, возможно, придется взять дамп всей системы, а затем определить, что происходит. (Я не эксперт в этом)
Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.