Невыгружаемый пул занял почти всю оперативную память в Windows 10 — что делать?
В некоторых случаях, на компьютерах и серверах Windows могут возникать проблемы с исчерпанием свободной памяти, вызванной утечкой некого системного драйвера, хранящего свои данные в невыгружаемом пуле памяти системы. Невыгружаемый пул памяти ( Non-paged memory ) – это данные в оперативной памяти компьютера, используемые ядром и драйверами операционной системой, которая никогда не выгружается на диск (в своп/ файл подкачки), т.е. всегда находится в физической памяти.
Текущий размер невыгружаемого пула памяти можно увидеть в диспетчере задач на вкладке Perfomance ( Производительность ) в разделе Memory ( Память ). На скриншоте ниже видно, что практически вся память на сервере занята, и большая часть ее относится к невыгружаемому пуле 4,2 Гб (Non-paged pool / Невыгружаемый пул). В нормальном состоянии размер невыгружаемого пула редко превышает 200-400 Мб. Это как правило свидетельствует о наличии утечки памяти в каком-то системном компоненте или драйвере.
При таком исчерпании памяти на сервере, в журнале событий могут возникать сообщения вида:
The server was unable to allocate from the system Non-Paged pool because the pool was empty
В подавляющем большинстве случаев причиной описанной утечки памяти является проблема со сторонними драйверами, установленными в системе. Как правило, это сетевые драйвера. Обратите внимание, как ведет себя пул при скачивании больших файлов (скорее всего он при этом быстро растет вплоть до 128 Гб или 75% физической памяти в x64 системах). Для очистки пула помогает только перезагрузка, и, если для домашнего компьютера это еще может быть приемлемо, на круглосуточно работающем сервере желательно найти нормальное решение.
Установка последних версий драйверов сетевых адаптеров
Попробуйте скачать и установить последние версии драйверов ваших сетевых адаптеров с сайта производителя.
В том случае, если у вас включено автоматическое обновление драйверов, убедитесь не начались ли проблемы после установки новых драйверов. Попробуйте откатить версию драйвера на более старую и проверить, воспроизводится ли проблема. Если проблема решилась, отключите автообновление драйверов .
Отключение драйвера мониторинга сетевой активности Windows
Достаточно часто причиной утечки памяти в невыгружаемый пул является несовместимость драйвера мониторинга сетевой активности (Network Data Usage — NDU) с драйверами сетевого адаптера компьютера. Данный сервис можно отключить без особых потерей функционала Windows.
Службу можно остановить командной:
sc config NDU start= disabled
- Откройте редактор реестра regedit .exe
- Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\
- Измените значения параметра Start на 4.
После внесения изменений нужно перезагрузить компьютер
Отключение роли Hyper-V
В некоторых случаях утеску памяти в невыгружаемый пул провоцирует установленная роль Hyper-V. В том случае, если она не нужна, рекомендуем отключить ее.
Используем утилиту Poolmon для поиска драйвера, вызвавшего утечку памяти
В том случае, если описанные выше способы не помогли, можно попытаться выяснить, какой конкретно драйвер вызвал утечку памяти в невыгружаемый пул.
Для этого нам понадобится консольная утилита Poolmoon.exe , входящая в комплект разработки Windows Driver Kit (WDK). С сайта MSFT скачайте и установите WDK для вашей версии Windows и запустите утилиту Poolmon.exe (в WDK для Windows 10 утилита находится в каталоге C:\Program Files (x86)\Windows Kits\10\Tools\.
После запуска утилиты нажмите клавиши P . Во втором столбце останутся теги процессы, которые используют невыгружаемую память (атрибут Nonp), затем, нажав клавишу B , выполним сортировку по столбцу Bytes.
В нашем примере видно, что больше всего RAM в невыгружаемом пуле используют драйвера с тегами Nr22, ConT и smNp.
Найти конкретные файлы драйверов, связанные с данными процессами можно командами:
findstr /m /l /s Nr22 %Systemroot%\System32\drivers\*.sys
findstr /m /l /s ConT %Systemroot%\System32\drivers\*.sys
findstr /m /l /s smNp %Systemroot%\System32\drivers\*.sys
Таким образом, мы получили список файлов драйверов, которые могут оказаться причиной проблемы. Теперь по именам файлов нужно определить, к каким драйверам и системным компонентам они относятся. Для этого можно воспользоваться утилитой sigcheck от Sysinternals.
Утилита возвращает имя, описание и версию драйвера. Теперь можно попытаться удалить/обновить/переустановить проблемный драйвер или службу. Данная инструкция применима как для Windows Server 2008 — 2016, так и для клиентских Windows 10, 8 и 7.
Высокое потребление памяти процессом Svchost.exe и службой wuauserv в Windows 10 и 7
Служба wuauserv – это стандартная служба обновления Windows, которая используется для сканирования компьютера, поиска, закачки и установки новых обновлений с узлов Windows Update или локальных WSUS серверов. В некоторых случаях служба wuauserv может работать некорректно, вызывая сильную нагрузку на процессор компьютера или использую большую часть оперативной памяти. Т.к служба wuauserv работает внутри процесса-контейнера svchost.exe, с точки зрения пользователей это выглядит, как будто процесс svchost сильно грузит процессор и оперативную память на вашем устройстве Windows. В этой статье мы рассмотрим как решить проблему высокого потребления памяти и ресурсов ЦП процессом wuauserv в Windows 7 и Windows 10.
Служба Wuauserv в Windows 7 грузит процессор и память на 50%
Часть пользователей стала жаловаться на проблемы с производительностью их компьютеров с Windows 7. Проблема проявляется следующим образом: ежедневно, примерно в одно и то же время (у каждого пользователя время свое), компьютер начинает сильно тормозить. В диспетчере задач до 1,2 -2 Гб и 100% CPU одного ядра памяти потребляет процесс svchost.exe. В результате в течении 30-60 минут работать с компьютером невозможно, все ужасно тормозит и виснет.
Проблемы наблюдались на клиентах Windows 7 SP1 x86 и x64, получающих обновления с локального сервера SCCM, используемого для управления обновлениями Microsoft на клиентах. На стороне клиента запускаем диспетчер задач (Task Manager) и на вкладке Процессы сортируем запущенные процесс по использованию памяти. Видим, что в настоящий процесс svchost.exe использует 11% CPU и 1,2 Гб оперативной памяти. На самом деле процесс svchost.exe – это процесс контейнер, внутри которого работают другие программы и потоки системных служб. С помощью Task Manager не получится понять, какой именно поток (служба) вызывает высокую нагрузку на систему.
Более подробную информацию о процессе и его потоках можно, к примеру, получить с помощью утилиты Process Explorer Марка Руссиновича.
Запускаем утилиту procexp.exe и находим в списке процесс svchost.exe который потребляет слишком много памяти или % CPU.
Открываем его свойства и переходим на вкладку Threads (Потоки). Здесь мы четко видим, что в рамках процесса svchost.exe больше всего ресурсов CPU и памяти потребляет поток службы wuauserv (Windows Update — Служба обновлений Windows). Служба wuauserv сканирует систему и сервер обновлений на предмет необходимости установки обновлений. В результате каких-то проблем в коде служба начинает «течь», потребляет всю доступную ей память вплоть до 1,5-2 Гб (максимума памяти который доступен процессу) и начинается активно использовать файл подкачки. Система от этого резко начинает тормозить.
Что интересно, проблеме в большей мере подвержены клиенты с 2 Гб оперативной памяти. На ПК с 4 и более Гб памяти, служба wuauserv также «утекает», но не выбирается из 2 Гб, и проблема не так явно проявляется для пользователей.
Если остановить службу wuauserv из консоли services.msc, нагрузка на систему резко уменьшиться. А потребление памяти процессом svchost.exe падает до 80-100 Мб.
В первую очередь попробовали сбросить состояние агента Windows Update и обновили его версию по методике, описанной в статье: Восстановление исходных настроек агента Windows Update. Проблема решилась и в течении нескольких дней не повторялась, но через какое-то время все началось заново. Видимо размер локального кэша и базы обновлений достиг каких-то пределов, и служба wuauserv опять стала «течь».
Перебрали еще множество различных методик, но реально помогла только установка следующих патчей для агента обновлений Windows 7:
- https://support.microsoft.com/en-us/kb/3050265 (Обновление WIndows Update агента от июня 2015)
- https://support.microsoft.com/en-us/kb/3065987 (Обновление WIndows Update агента от июля 2015)
- https://support.microsoft.com/en-us/kb/3102810 (Патч для Windows / 2008 R2, решающий проблему высокой загрузки CPU и памяти при установке обновлений через WSUS, ноябрь 2015).
После установки обновлений, использование памяти процессом wuauserv снизилось до 200 Мб, а сам процесс сканирования стал занимать гораздо меньше времени.
Wuauserv грузит процессор и память в Windows 10
Проблема, когда служба центра обновления Windows сильно грузит процессор и использует слишком много памяти встречается и в различных версиях Windows 10.
Откройте диспетчер задач и найдите процесс svchost.exe который потребляет слишком много памяти или ресурсов CPU. Щелкните по нему ПКМ и выберите пункт “Перейти к службам”.
Убедитесь, что в рамках данного процесса svchost.exe работает служба wuauserv (Центр обновления Windows).
Т.к. диспетчер задач не позволяет определить какая именно из системных служб, работающих внутри одного процесса svchost сильно грузит компьютер, нужно воспользоваться Process Explorer (как описано выше). Убедитесь, что высокая загрузка CPU/памяти вызвана службой wuauserv (в нашем примере это библиотека C:\WINDOWS\system32\wuaueng.dll).
В отличии от рассмотренного выше кейса с утечкой памяти в процессе службы обновлений в Windows 7, для Windows 10 отсутствует универсальный патч, который позволяет исправить проблему. Поэтому ниже мы перечислим основные шаги, которые следует выполнить для уменьшения использования памяти и процессором службой обновления Windows.
Дождитесь окончания установки обновлений
Если служба обновлений Windows в данный момент времени выполняет сканирование вашего компьютера или установку обновлений, то высокая загрузка компьютера не должна вас удивлять. Попробуйте подождать (1-2 часа в зависимости от производительности компьютера) и дождаться пока wuauserv закончит загрузку и установку обновлений.
Запустите средство устранения неполадок центра обновлений Windows 10
Попробуйте выполнить диагностику служба обновления Windows 10с помощью встроенного средства устранения неполадок (Window Update Troubleshooter). Перейдите в меню Параметры -> Обновление и безопасность -> Устранение неполадок. Выберите пункт “Центр обновления Windows (Устраните проблемы, мешающие обновлению Windows) -> Запустить средство устранения неполадок”.
Утилита проверит состояние службы и попробует исправить найденные проблемы.
Очистите папки SoftwareDistribution и catroot2
Попробуйте выполнить очистку папок SoftwareDistribution и catroot2.
- В каталоге C:\Windows\SoftwareDistribution хранятся временные файлы службы Windows Update и файлы скачанных обновлений.
- В каталоге %windir%\System32\catroot2\ хранятся сигнатуры пакетов обновлений.
Попробуем очистить их с помощью следующего скрипта (сохраните код в текстовом файле с расширением *.bat и запустите с правами администратора):
attrib -h -r -s %windir%\system32\catroot2
attrib -h -r -s %windir%\system32\catroot2\*.*
net stop wuauserv
net stop CryptSvc
net stop BITS
ren %windir%\system32\catroot2 catroot2.old
ren %windir%\SoftwareDistribution SoftwareDistribution.old
ren «%ALLUSERSPROFILE%\application data\Microsoft\Network\downloader» downloader.old
net Start BITS
net start CryptSvc
net start wuauserv
Проверьте целостность системных файлов Windows
DISM /Online /Cleanup-Image /RestoreHealth
Проверьте компьютер на вирусы
Проверьте вашу Windows на вирусы в офлайн режиме с помощью загрузочного образа (Kaspersky Rescue Disk или Dr.Web LiveDisk).
Обновите вашу Windows 10
Обновите вашу версию Windows 10, установив актуальный на данный момент времени билд. Вручную скачайте и установите с сайта Microsoft Update Catalog (https://www.catalog.update.microsoft.com/Home.aspx) последний кумулятивный апдейт для вашей версии Windows (Microsoft ежемесячно исправляет баги и различные ошибки Windows и добавляет исправления в кумулятивный пакет обнволений).
Отключите оптимизацию доставки
Перейдите в меню Параметры -> Обновление и безопасность -> Центр обновления Windows -> Дополнительные параметры -> Оптимизация доставки. Выключите пункт «Разрешить загрузки с других компьютеров» и перезагрузите компьютер.
Удалите последние обновления
Если проблема с высокой загрузкой процессора и памятью службой wuauserv возникла сразу после установки новых обновлений Windows, попробуйте по очереди удалить последние обновления (Панель управления -> Программы и компоненты -> Просмотр установленных обновлений). Отсортируйте обновления по дате установки, щелкните ПКМ по обновлению и выберите Удалить.
Отключите службу wuauserv
Я никогда не рекомендую отключать службу обновлений Windows, т.к. вы перестанете получать обновления безопасности и подвергаете ваш компьютер риску взлома или заражения. Отключение службы обновлений можно использовать как временный шаг, когда другие способы восстановить нормальную работу системы не помогают.
Откройте консоль управления службами (services.msc), найдите службу «Центр обновления Windows», остановите ее и измените тип запуска на Отключена. Сохраните изменения и перезагрузите компьютер.
Во второй вторник следующего месяца обязательно вручную скачайте и установите новые кумулятивные обновления для вашей версии Windows. Включите службу wuauserv. Возможно ваша проблема будет исправлена в новом обновлении.