Что такое пул памяти

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Загрузите WDK для вашей версии Windows 10 (не используйте шаги на предлагаемой странице, относящиеся к установке Windows SDK или Visual Studio, просто найдите пункт «Установите WDK для Windows 10» на странице и запустите установку) с сайта https://developer.microsoft.com/ru-ru/windows/hardware/windows-driver-kit.
  2. После установки, зайдите в папку с WDK и запустите утилиту Poolmon.exe (по умолчанию утилиты находятся в C: Program Files (x86)Windows Kits 10 Tools ).
  3. Нажмите латинскую клавишу P (так, чтобы второй столбец содержал только значения Nonp), затем — B (это оставит в списке только записи, использующие невыгружаемый пул и отсортирует их по количеству занимаемого пространства в памяти, т.е. по столбцу Bytes).
  4. Обратите внимание на значение столбца Tag для занимающей наибольшее количество байт записи.
  5. Откройте командную строку и введите команду findstr /m /l /s значение_столбца_tag C:WindowsSystem32drivers*.sys
  6. Вы получите список файлов драйверов, которые могут оказаться причиной проблемы.

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

в Компьютеры 23.09.2018 0 154 Просмотров

Пул памяти — это блок памяти, назначенный конкретной программе или приложению на компьютере. Информация для запущенной программы, такой как операционная система или любое открытое приложение на компьютере, хранится в памяти произвольного доступа (ОЗУ) на компьютере. Присвоение каждой программе определённого блока памяти с использованием технологии пула памяти позволяет избежать проблемы перекрытия памяти. Перекрытие происходит, когда две программы пытаются использовать одни и те же разделы памяти; например, пытаясь разделить кусочек пирога, программы могут «сражаться» за разделяемую память, что приводит к ошибкам в системе.
C пулом памяти каждая программа получает свой собственный «срез», что приводит к гармоничной работе компьютера. Пользователь может думать о ОЗУ на компьютере, как о простой многоэтажной книжной полке. Без использования пула памяти, когда информация поступает, компьютер только начинает заполнять полки сверху донизу без разбора, сплайсируя информацию, чтобы в памяти не существовало линейной логической структуры. Хотя это полностью действительный подход к обработке памяти, для организации скорости работы, но недостатком является то, что программы удаляются из памяти, а новые программы занимают их место. Скорее всего, информация, необходимая новой программе, не будет плотно вписываться в освобожденные пробелы, поскольку старая программа была удалена. Без объединения памяти это несоответствие заставляет компьютер ещё больше нарушать организацию в ОЗУ — это называется фрагментацией.

Наличие фрагментированной информации в памяти означает, что компьютеру придётся выполнить действие жонглирования для извлечения информации для какой-либо конкретной программы. С пулом памяти фрагментация минимизируется, поскольку компьютер назначает каждой программе определенную область в «книжной полке» памяти, сводя к минимуму риск дезорганизации. Это приводит к небольшому количеству дополнительных расходов на компьютере с самого начала, так как он должен выполнять своё «жонглирование» памяти при первой загрузке программы, но существенно повышает эффективность программы во время её работы, поскольку компьютер уже знает на какой «полке» посмотреть для поиска информации о программе.

Операционная система обычно контролирует работу пула памяти. Она имеет возможность распределять и переупорядочивать различные «пулы» в ОЗУ компьютера, при необходимости настраивая требования отдельных приложений. Например, если приложение запрашивает больший блок памяти, чем ему был назначен, операционная система должна действовать, чтобы увеличить конкретный пул, назначенный этой программе, без вмешательства в пулы памяти других активных программ в системе. Оптимизация требует, чтобы конкретное приложение настраивалось для конкретной операционной системы и наоборот, гарантируя, что обе вместе работают, чтобы максимально распределить и зарезервировать память для приложения.

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

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

po

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

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

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

  1. Откройте редактор реестра regedit.exe
  2. Перейдите в ветку HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesNdu
  3. Измените значения параметра 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 Kits10Tools.

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

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

Найти конкретные файлы драйверов, связанные с данными процессами можно командами:

findstr /m /l /s Nr22 %Systemroot%System32drivers*.sys
findstr /m /l /s ConT %Systemroot%System32drivers*.sys
findstr /m /l /s smNp %Systemroot%System32drivers*.sys

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

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

Теперь можно попытаться удалить/обновить/переустановить проблемный драйвер или службу.
Данная инструкция применима как для Windows Server 2008 — 2016, так и для клиентских Windows 10, 8 и 7.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *