Сервер не смог выделить память из невыгружаемого пула памяти так как невыгружаемый пул пуст srv

Обновлено: 04.07.2024

В некоторых случаях, на компьютерах и серверах 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.

В этой статье содержится решение проблемы, из-за которую не удается выделить память из пула страниц системы.

Применяется к: Windows Server 2012 R2
Исходный номер КБ: 312362

Симптомы

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

Source - SRV
Тип — ошибка
ID события — 2020 г.
Описание -

Сервер не смог выделить из пула страниц системы, так как пул был пустым.
Данные —
0000: 00040000 00540001 00000000 c00007e4
0010: 00000000 c000009a 00000000 00000000
0020: 00000000 00000000 0000000b

Причина

Несколько факторов могут привести к истощению запаса памяти пула с страницами. Включение тегов пула и их использование с разными интервалами времени может помочь вам понять, какой драйвер потребляет память пула с poolsnaps страницами. Если указывает на то, что тег MmSt (прототип объекта раздела Mm) является самым большим потребителем и память пула на странице исчерпана или система журналирует событие ошибки 2020-х, существует большая вероятность того, что на сервере будет открыто большое количество poolsnaps файлов. По умолчанию диспетчер памяти пытается обрезать выделенную страницу памяти пула, когда система достигает 80 процентов от общего пула страниц. В зависимости от конфигурации системы максимальная память пула на компьютере может быть 343 МБ, а 80 процентов — 274 МБ. Если диспетчер памяти не может обрезать достаточно быстро, чтобы не отстать от спроса, может произойти событие, перечисленное в разделе "Симптомы" этой статьи. Настройка диспетчера памяти, чтобы запустить процесс обрезки раньше (например, когда она достигает 60 процентов), можно было бы не отстать от запроса пула на страницу во время внезапного пикового использования и избежать остановки памяти пула страниц.

Решение

В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения о том, как создать и восстановить реестр, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
322756 Создание резервной копии и восстановление реестра Windows

В борьбе с проблемой была полезна следующая рекомендация по настройке:

Запустите редактор реестра (Regedt32.exe).

Найдите и нажмите следующий ключ в реестре:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management

В меню Редактирование нажмите кнопку Добавить значение, а затем добавьте следующее значение реестра:
Имя значения: PoolUsageMaximum
Тип данных: REG_DWORD
Radix: Десятичной
Данные значения: 60

Установка значения 60 сообщает диспетчеру памяти начать процесс обрезки с 60 процентов PagedPoolMax, а не с параметром 80 процентов по умолчанию. Если порогового значения в 60 процентов недостаточно для обработки пиков активности, уменьшите этот параметр до 50 или 40 процентов.

Имя значения: PagedPoolSize
Тип данных: REG_DWORD
Radix: Hex
Данные значения: 0xFFFFFFFF

Настройка pagedPoolSize для 0xFFFFFFFF максимального пула страниц вместо других ресурсов на компьютер.

Параметр 0xFFFFFFFF PagedPoolSize не рекомендуется использовать на 32-битных компьютерах Windows Server 2003 с 64 ГБ оперативной памяти. Это потенциально приведет к сбою в записи free System PTE и может привести к непрерывной перезагрузке компьютера. Для этой конфигурации тщательно выберите значение, основанное на требованиях и доступных ресурсах.

Закройте редактор реестра.

Перезапустите сервер, чтобы изменения вступили в силу.

Status

Корпорация Майкрософт подтвердила, что это проблема в продуктах Майкрософт, перечисленных в разделе "Применяется к".

Добрый вечер. Windows Server 2003 R2 Enterprise Edition SP2. Используется терминальный сервер, 15- 20 пользователей 1С.
Сегодня появилась ошибка 2019 в журнале. Начал притормаживать сервер. Затем пользователей повыбивало из сессий. Пропала возможность заходить на сервер или путешествовать из сервера в локальной сети(доступ из внешки остался).
Запускал poolmon - тег Even типа Nonp занимал 152Mb.
После перезагрузки, всё заработало. Сейчас наблюдаю плавный рост тега Even(в 2 часа от 0.6Mb до 5.5Mb).
То есть через день, два будет та же история насколько я понимаю. Посоветуйте пожалуйста, в чём может быть проблема(заранее спасибо)? Спасибо за советы проблема решена и больше не проявлялась. Убил из автозапуска SMTP сервер и всё прошло.

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Добрый день всем участникам форума! Чтобы не плодить темы - пощу сюда.

Сходная проблема с Windows 2000 professional, сборка 2195. При круглосуточной работе система не выдерживает даже неделю. Самое долгое время работы (по "Евересту") 5 сут., 22 часа, 2 мин. Причина - ошибка 2019.

Невыгружаемый пул обнуляется лишь при перезагрузке. Сначала его размер (сразу после перезагрузки) составляет около 12кб, постепенно за пять-шесть суток разрастается до 160кб. И компьютер виснет. Уходит в "экран смерти".

Скорее всего причина в антивируснике ESET Nod 5.2.9.12 Толь он так "косовато" с Windows 2000 работает, толь ещё чегото. Выгрузить его я не могу, он ожесточённо сопротивляется. (на то он и антивирусник).
Приходится компьютер перегружать раз в неделю дистанционно. Это не особо удобно, нужно следить за ним постоянно, чтобы не переполнилась невыгружаемая память. Без антивируса тоже нельзя оставлять. Машина в сети постоянно, состоит при оборудовании, в него из оборудования копится база тарификационных данных.

Есть-ли какаянить маленькая утилитка, работающая в том числе и под Windows 2000, чтобы выводить на экран значение занятой невыгружаемой памяти? Чтобы не влазить в менеджеры процессов. А то слабоквалифицированному персоналу это мало под силу.

date

27.08.2021

directory

Windows 10, Windows Server 2016, Windows Server 2019

comments

комментариев 5

На компьютерах и серверах Windows могут возникать проблемы с исчерпанием свободной памяти, вызванной утечкой некого системного драйвера, хранящего свои данные в невыгружаемом пуле памяти системы. Невыгружаемый пул памяти (Non-paged memory) – это данные в оперативной памяти компьютера, используемые ядром и драйверами операционной системой, которая никогда не выгружается на диск (в своп/ файл подкачки), т.е. всегда находится в физической RAM памяти.

Текущий размер невыгружаемого пула памяти можно увидеть в диспетчере задач Windows на вкладке Perfomance (Производительность) в разделе Memory (Память). На скриншоте ниже видно, что практически вся память на сервере занята, и большая часть ее относится к невыгружаемому пулу 4,2 Гб (Non-paged pool / Невыгружаемый пул). В нормальном состоянии размер невыгружаемого пула редко превышает 200-400 Мб. Большой размер невыгружаемого пула часто указывает на наличии утечки памяти в каком-то системном компоненте или драйвере.

Non-paged pool забил всю память компьютера

При утечке памяти в невыгружаемом пуле на сервере, в системном журнале событий появится события:

Event ID: 2019
Source: Srv
Description: The server was unable to allocate from the system nonpaged pool because the pool was empty

В подавляющем большинстве случаев причиной такой утечки памяти является проблема со сторонними драйверами, установленными в Windows. Как правило, это сетевые драйвера. Обратите внимание, как ведет себя пул при скачивании больших файлов (скорее всего он при этом быстро растет).

Максимальный размер невыгружаемого пула в Windows:

  • Windows x64 до 128 Гб и не более 75% физической памяти
  • Windows x86 до 2 Гб и не более 75% RAM

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

Установка последних версий драйверов сетевых адаптеров

Попробуйте скачать и установить последние версии драйверов ваших сетевых адаптеров с сайта производителя.

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

Отключение драйвера мониторинга сетевой активности Windows

Достаточно часто причиной утечки памяти в невыгружаемый пул является несовместимость драйвера мониторинга сетевой активности (Network Data Usage — NDU, %WinDir%\system32\drivers\Ndu.sys) с драйверами сетевого адаптера компьютера (чаще всего конфликтуют драйвера для сетевых карт Killer Network и MSI). Данный сервис можно отключить без особых потерей функционала Windows.

Службу можно остановить командной:

sc config NDU start= disabled

sc config NDU start= disabled

Либо через реестр:

  1. Откройте редактор реестра regedit.exe
  2. Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\
  3. Измените значения параметра Start на 4.

отключение NDU - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\

После внесения изменений нужно перезагрузить компьютер

Отключение роли Hyper-V

В некоторых случаях утечку памяти в невыгружаемый пул вызывает установленная роль Hyper-V. Если эта роль не нужна, рекомендуем отключить ее.

Remove-WindowsFeature -Name Hyper-V

Команда для Windows 10:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

Поиск драйвера, вызвавшего утечку памяти с помощью Poolmon

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

Для этого нам понадобится консольная утилита Poolmoon.exe, входящая в комплект разработки Windows Driver Kit (WDK). Скачайте с сайта Microsoft и установите WDK для вашей версии Windows и запустите утилиту Poolmon.exe (в WDK для Windows 10 утилита находится в каталоге C:\Program Files (x86)\Windows Kits\10\Tools\ ).

После запуска утилиты Poolman.exe нажмите клавиши P. Во втором столбце останутся теги процессов, которые используют невыгружаемую память (атрибут Nonp) Затем нажмите клавишу B, чтобы выполнить сортировку по столбцу Bytes.

Poolmoon - спсико тегов в невыгружаемом пуле памяти

В левом столбце указаны теги драйверов. Ваша задача определить файл драйвера, использующего этот тег. В нашем примере видно, что больше всего RAM в невыгружаемом пуле используют драйвера с тегами Nr22, ConT и smNp.

Вы должны проверить драйвера на наличие найденных тегов с помощью утилиты strings.exe (от Sysinternals), с помощью встроенной команды findstr или с помощью PowerShell.

Следующие команды должны найти файлы драйверов, связанные с найденными вами тегами. данными процессами можно командами:

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

Также можно воспользоваться PowerShell:

Set-Location "C:\Windows\System32\drivers"
Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Py28" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Ne40" -CaseSensitive | Select-Object FileName –Unique

Вы можете отобразить файлы драйверов непосредственно в poolmon.exe. Для этого убедитесь, что в каталоге утилиты находится файл pooltag.txt. Его можно скопировать из каталога установки WDK или найти в GitHub. Запустите утилиту:

poolmon показать имя драйвера использующего невыгружаемый пул

Обратите внимание, что имя драйвера теперь отображается в столбце Mapped_driver.

Если поиск не дал результатов, проверьте возможно утечка памяти вызвана не системным процессом. Запустите Task Manager, перейдите на вкладку Details, добавьте колонку NP Pool и найдите процессы с большим размером памяти в невыгружаемом пуле.

показывать размер невыгружаемого пула процессов в taskmanager Windows 10

Таким образом, мы получили список файлов драйверов, которые могут оказаться причиной проблемы. Теперь по именам файлов нужно определить, к каким драйверам и системным компонентам они относятся. Для этого можно воспользоваться утилитой sigcheck от Sysinternals.

sigcheck

Утилита возвращает имя драйвера, его свойства и информацию о версии.

Теперь можно попытаться удалить/обновить/переустановить проблемный драйвер или службу.

Если утечка памяти привела к BSOD, вы можете определить проблемный драйвер по файл дампа памяти.

  1. Загрузите дамп памяти в отладчик Windbg;
  2. Выполните команду: !vm
  3. Если значение NonPagedPool Usage больше чем Max, это говорит о том, что невыгружаемый пул исчерпан;
  4. Проверьте содержимое пула командой (результаты будут отсортированы по использованию невыгружаемого пула): !poolused 2
  5. После получение тега драйвера найдите файл с помощью findstr или strings как описано выше.

Данная инструкция применима как для Windows Server 2019/2016/2012R2, так и для клиентских Windows 10, 8.1.

Невыгружаемый пул — утечка памяти в Windows 10

Одна из распространенных проблем пользователей Windows 10, особенно с сетевыми картами Killer Network (Ethernet и Wireless)— заполняющаяся оперативная память при работе в сети. Обратить на это внимание можно в диспетчере задач на вкладке «Производительность», выбрав RAM. При этом, заполняется невыгружаемый пул памяти.

Проблема в большинстве случаев вызвана неправильной работой сетевых драйверов в сочетании с драйверами монитора использования сети Windows 10 (Network Data Usage, NDU) и достаточно просто решается, о чем и пойдет речь в этой инструкции. В некоторых случаях, причиной утечек памяти могут быть и другие драйверы оборудования. Близкий по теме материал: Что такое память Кэшировано в Windows 10 и как очистить кэшированную память.

Исправление утечки памяти и заполнения невыгружаемого пула при работе в сети

Наиболее распространенной ситуацией является, когда невыгружаемый пул RAM Windows 10 заполняется при работе в Интернете. Например, легко заметить, как он растет при скачивании большого файла и после этого не очищается.

Исправление проблемы с невыгружаемым пулом в реестре Windows 10

  1. Зайдите в редактор реестра (нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter).
  2. Перейдите к разделу
  3. Дважды нажмите по параметру с именем «Start» в правой части редактора реестра и задайте значение 4 для него, для отключения монитора использования сети.
  4. Закройте редактор реестра.

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

Если шаги, описанные выше, не помогли, попробуйте следующее:

  • Если драйвер сетевой карты и (или) беспроводного адаптера был установлен с официального сайта производителя, попробуйте удалить его и дать Windows 10 установить стандартные драйверы.
  • Если драйвер был автоматически установлен Windows или был предустановлен производителем (и система после этого не менялась), попробуйте скачать и установить последнюю версию драйвера с официального сайта производителя ноутбука или материнской платы (если это ПК).

Заполняемый невыгружаемый пул оперативной памяти в Windows 10 не всегда бывает вызван драйверами именно сетевой карты (хотя чаще всего) и если действия с драйверами сетевых адаптеров и NDU не приносят результата, можно прибегнуть к следующим шагам:

  1. Установка всех оригинальных драйверов от производителя на ваше оборудование (особенно если на данный момент времени у вас установлены драйверы, автоматически установленные Windows 10).
  2. Использование утилиты Poolmon из состава Microsoft WDK для определения драйвера, вызывающего утечку памяти.

Как узнать, какой драйвер вызывает утечку памяти в Windows 10 с помощью Poolmon

Невыгружаемый пул в диспетчере задач Windows 10

Выяснить конкретные драйверы, приводящие к тому, что невыгружаемый пул памяти растет можно с помощью инструмента Poolmoon, входящим в состав Windows Driver Kit (WDK), скачать который можно с официального сайта Майкрософт.

Дальнейший путь — выяснить по именам файлов драйверов (с помощью Google, например), к какому оборудованию они относятся и пробовать установить, удалить или откатить в зависимости от ситуации.

Читайте также: