Утечка памяти в невыгружаемом пуле (Non-Paged Pool) в Windows 10/11 и Windows Server может привести к исчерпанию оперативной памяти, вызывая замедление или сбои системы. В этой статье описаны причины роста невыгружаемого пула и способы устранения проблемы.
Что такое невыгружаемый пул памяти
Невыгружаемый пул — это область оперативной памяти, используемая ядром Windows и драйверами, которая никогда не выгружается в файл подкачки и всегда остается в физической RAM. Его размер можно проверить в Диспетчере задач:
1. Откройте Диспетчер задач (Ctrl+Shift+Esc).
2. Перейдите на вкладку Производительность -> Память.
3. Найдите значение Невыгружаемый пул (Non-paged pool).
В норме он составляет 200–400 МБ. Значительный рост (например, до 4.2 ГБ) указывает на утечку памяти, часто сопровождаемую событием в Журнале событий:
— Event ID: 2019
— Source: Srv
— Description: The server was unable to allocate from the system nonpaged pool because the pool was empty
Причины роста невыгружаемого пула
Основная причина — утечка памяти в сторонних драйверах, чаще всего сетевых. Пул может быстро расти при скачивании больших файлов. Другие причины:
— Несовместимость драйвера мониторинга сетевой активности NDU (Network Data Usage, %WinDir%\system32\drivers\Ndu.sys) с сетевыми адаптерами (Killer Network, MSI).
— Проблемы с ролью Hyper-V.
— Устаревшие или некорректные драйверы (например, spaceport.sys в Windows Server 2019 при использовании Storage Spaces).
— Проблемы с драйверами дисковых контроллеров или ПО, например, Intel Rapid Storage Technology.
Максимальный размер невыгружаемого пула
— Windows x64: до 128 ГБ или 75% физической памяти.
— Windows x86: до 2 ГБ или 75% RAM.
Решения проблемы
Решение 1: Обновление или откат драйверов
1. Скачайте последние драйверы сетевых адаптеров с сайта производителя.
2. Если проблема началась после обновления драйвера, откатите его:
— Диспетчер устройств -> Сетевые адаптеры -> правый клик -> Свойства -> Драйвер -> Откатить.
3. Отключите автоматическое обновление драйверов:
— Параметры -> Система -> Дополнительно -> Оборудование -> Параметры установки устройств -> Нет.
Решение 2: Отключение драйвера NDU
1. Откройте командную строку с правами администратора и выполните:
sc config NDU start=disabled
2. Или через реестр:
— Запустите regedit.
— Перейдите в HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu.
— Измените параметр Start на 4 (DWORD).
3. Перезагрузите компьютер.
Решение 3: Отключение Hyper-V
Если Hyper-V не используется, отключите его:
— Для Windows Server:
Remove-WindowsFeature -Name Hyper-V
— Для Windows 10/11:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
4. Перезагрузите систему.
Решение 4: Поиск проблемного драйвера с помощью Poolmon
1. Скачайте Windows Driver Kit (WDK) с сайта Microsoft.
2. Запустите Poolmon.exe (например, из C:\Program Files (x86)\Windows Kits\10\Tools).
3. Нажмите P для отображения только невыгружаемого пула (Nonp).
4. Нажмите B для сортировки по столбцу Bytes.
5. Найдите теги драйверов, потребляющих больше всего памяти (например, Nr22, ConT, smNp).
Идентификация драйвера
— Используйте findstr для поиска файлов драйверов:
findstr /m /l /s Nr22 %SystemRoot%\System32\drivers\*.sys
— Или PowerShell:
Set-Location "C:\Windows\System32\drivers"
Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique
— Для отображения имени драйвера в Poolmon:
— Скопируйте pooltag.txt из WDK или GitHub в папку с Poolmon.
— Запустите: Poolmon /g.
— Используйте Sigcheck от Sysinternals для получения информации о драйвере:
sigcheck C:\Windows\System32\drivers\rdyboost.sys
6. Обновите, переустановите или удалите проблемный драйвер.
Решение 5: Проверка пользовательских процессов
1. В Диспетчере задач перейдите на вкладку Подробности.
2. Добавьте столбец Невыгружаемый пул (NP Pool).
3. Найдите процессы с высоким потреблением памяти и завершите их или обновите связанное ПО.
Решение 6: Анализ дампа памяти при BSOD
Если утечка вызывает BSOD:
1. Загрузите дамп памяти в WinDbg.
— Скачать WinDbg можно на официальном сайте, Файл называется winsdksetup.exe
2. Выполните:
!vm
Если NonPagedPool Usage превышает Max, пул исчерпан.
3. Проверьте теги:
!poolused 2
4. Найдите драйвер с помощью findstr или strings, как указано выше.
Дополнительные рекомендации
— Мониторинг:
— Используйте Perfmon для отслеживания Pool Nonpaged Bytes:
[](https://learn.microsoft.com/en-us/answers/questions/1253100/non-paged-buffer-pool-memory-growth)
perfmon -> Process -> Pool Nonpaged Bytes -> All instances
— Проверка Storage Spaces:
— Если используется Storage Spaces, проверьте драйвер spaceport.sys. Обновления Windows (например, 2019-06) могут устранить утечки.
— Обновление системы:
— Установите последние обновления Windows, так как некоторые утечки исправлены патчами (например, LSASS или SM00).
— Проверка антивируса:
— Антивирусы (например, Avira) могут вызывать утечки. Отключите или замените антивирус для теста.
— Проверка целостности системы:
— Выполните:
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
Рост невыгружаемого пула в Windows 10/11 и Server 2019/2016 обычно вызван утечкой памяти в драйверах, особенно сетевых. Обновите драйверы, отключите NDU или Hyper-V, используйте Poolmon для поиска проблемного драйвера. Регулярный мониторинг через Perfmon и обновление системы помогут предотвратить проблему.