Nonpaged pool сжирает память windows server 2012

На компьютерах и серверах Windows могут возникать проблемы с исчерпанием свободной памяти, вызванной утечкой некого системного драйвера, хранящего свои данные в

На компьютерах и серверах 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
  • Отключение роли Hyper-V
  • Поиск драйвера, вызвавшего утечку памяти с помощью Poolmon

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

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

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

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

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

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

sc config NDU start= disabled

sc config NDU start= disabled

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

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

отключение NDU - HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesNdu

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

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

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

В Windows Server 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 Kits10Tools
).

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

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

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

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

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

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

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

Set-Location "C:WindowsSystem32drivers"
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 /g

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

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

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

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

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

sigcheck C:WindowsSystem32driversrdyboost.sys

Утилита возвращает имя драйвера, его свойства и информацию о версии.
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 Server 2012 R2 Datacenter Windows Server 2012 R2 Standard Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation More…Less

This article describes a memory leak issue that occurs in the svhdxflt.sys filter driver in Windows Server 2012 R2. The leak occurs against nonpaged pool with the svxp tag. You can fix this issue by using the update in this article. Before you install this update, see the Prerequisites and the Restart requirement section.

How to obtain this update

Important If you install a language pack after you install this update, you must reinstall this update. Therefore, we recommend that you install any language packs that you need before you install this update. For more information, see Add language packs to Windows.

Method 1: Windows Update

This update is provided as a Recommended update on Windows Update. For more information on how to run Windows Update, see How to get an update through Windows Update.

Method 2: Microsoft Download Center

The update is available for download from the Microsoft Download Center:

Download the Windows Server 2012 R2 package now.

For more information about how to download Microsoft support files, click the following article number to view the article in the Microsoft Knowledge Base:

119591 How to obtain Microsoft support files from online services Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.

Update detail information

Prerequisites

To apply this update, you must have April 2014 update rollup for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2 (2919355) installed in Windows Server 2012 R2.

Registry information

To apply this update, you don’t have to make any changes to the registry.

Restart requirement

You have to restart the computer after you apply this update.

Update replacement information

This update doesn’t replace a previously released update.

Status

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the «Applies to» section.

References

Learn about the terminology that Microsoft uses to describe software updates.

File Information

The English (United States) version of this software update installs files that have the attributes that are listed in the following tables. The dates and times for these files are listed in Coordinated Universal Time (UTC). Be aware that dates and times for these files on your local computer are displayed in your local time and with your current daylight saving time bias. The dates and times may also change when you perform certain operations on the files.

Notes

  • The files that apply to a specific product, milestone (RTM, SPn), and service branch (LDR, GDR) can be identified by examining the file version numbers as shown in the following table:

    Version

    Product

    Milestone

    Service branch

    6.3.960 0.18 xxx

    Windows Server 2012 R2

    RTM

    GDR

  • GDR service branches contain only those fixes that are widely released to address widespread, critical issues. LDR service branches contain hotfixes in addition to widely released fixes.

  • The MANIFEST files (.manifest) and the MUM files (.mum) that are installed for each environment are listed in the «Additional file information» section. MUM, MANIFEST, and the associated security catalog (.cat) files, are very important to maintain the state of the updated components. The security catalog files, for which the attributes are not listed, are signed with a Microsoft digital signature.

x64 Windows Server 2012 R2

File name

File version

File size

Date

Time

Platform

Svhdxflt.sys

6.3.9600.18185

155,136

30-Dec-2015

14:48

x64

x64 Windows Server 2012 R2

File property

Value

File name

Amd64_aedeeedec8c63a6f30b6e313646fc3aa_31bf3856ad364e35_6.3.9600.18185_none_492eb0ff11f907ad.manifest

File version

Not applicable

File size

721

Date (UTC)

30-Dec-2015

Time (UTC)

22:31

Platform

Not applicable

File name

Amd64_microsoft-windows-f..uster-svhdxflt-core_31bf3856ad364e35_6.3.9600.18185_none_cb8a2a351a3104dd.manifest

File version

Not applicable

File size

4,505

Date (UTC)

30-Dec-2015

Time (UTC)

15:35

Platform

Not applicable

File name

Update.mum

File version

Not applicable

File size

1,595

Date (UTC)

30-Dec-2015

Time (UTC)

22:31

Platform

Not applicable

Need more help?

  • Remove From My Forums
  • Question

  • Hello

    I’ve got a 2012R2 virtual machine that gradually keeps running out of memory. Upon checking the mem usage I can see that the processes consuming the memory don’t add up to the amount that
    Windows reports as being in use. 

    However, the non-paged pool usage is 7.9GB and climbing so there’s must be a leak in the non-paged pool.

    I’ve used poolmon to try and establish the driver that’s causing the leak but when I filter by Bytes, the largest driver is only using around 40MB.  From looking this up I kind of
    expected poolmon to display a driver using around 7GB or more.  Am I missing something here?  Can anyone assist?

    Cheers

Answers

  • If you’ve got negative numbers…. does that indicate numbers so large that the calculations overflowed? 

    NDnd Nonp  950723035 (15641) 939125599 (15559) 11597436      -1 (     0)    370

    If I parsed that correctly, the -1 fits into Bytes column. So if that too is an overflow, then that would explain why you’re not seeing a big number in the normal poolmon display. And it might point to the problem pool. 

    I’d suggest a reboot and then monitor it. When it starts growing watch poolmon for NDnd and run xperf and WPA to see if you can identify the offending module in the stack display.

    If NDnd is the offending pool, I found this.

    https://support.microsoft.com/en-us/help/4537795/windows-10-update-kb4537795 

    Addresses an issue that might cause Direct Access servers to use a large amount of non-paged pool memory (pooltag: NDnd). 

    I’m not familiar with Direct Access and I haven’t been able to find a similar KB for 2012R2. Is this a Direct Access server? 

    • Marked as answer by

      Monday, April 20, 2020 3:49 PM

Windows computers and servers may experience troubles with memory overflow caused by a leak of a certain system driver that stores its data in the system’s non-paged memory pool. Non-paged memory pool is data in the computer’s RAM used by the kernel and drivers of the operating system.  The non-paged pool is never swapped to the disk (to the paging file), it is always stored only in the physical memory.

You can see the current size of the non-paged memory in the Memory section of the Performance tab in the Task Manager. The screenshot below shows that almost all memory of the server is busy, and most part of it is occupied by the non-paged pool 4.2GB. Normally, the size of the non-paged pool rarely exceeds 200-400 MB. A large non-paged pool size often indicates that there is a memory leak in some system component or device driver.

Large Memory Usage in Non-Paged Pool on Windows

If there is a memory leak in the non-paged pool on the server, the following events will appear in the System event log:

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

In most cases, the reason for the memory leak described above is some problems with the third-party drivers installed in Windows. As a rule, these are network drivers. Please, pay attention to the pool behavior when downloading large files (most likely, it grows rapidly).

Maximum non-paged pool size on Windows:

  • Windows x64 up to 128 Gb and no more than 75% of physical memory
  • Windows x86 up to 2 Gb and no more than 75% RAM

Only the Windows reboot helps to clean up the non-paged pool. It may be acceptable for a home device, but you should find a better solution for a server working 24/7.

Contents:

  • Disable the Network Data Usage Monitoring Driver
  • Using PoolMon to Find a Kernel-Mode Memory Leak
  • Install the Latest Versions of Network Adapter Drivers
  • Disable the Hyper-V Role

Disable the Network Data Usage Monitoring Driver

Quite often, the reason for a memory leak in the non-paged pool is the incompatibility of the network activity monitoring driver (Network Data Usage — NDU, %WinDir%system32driversNdu.sys) with the network adapter drivers. Most often Killer Network and MSI network card drivers conflict with NDU driver. This service can be disabled without much loss of Windows functionality.

Stop the NDU service with the command:

sc config NDU start= disabled

disable Network Data Usage (NDU) driver

Or through the registry:

  1. Open the Registry Editor (regedit.exe);
  2. Go to registry key HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesNdu;
  3. Change the value of the Start parameter to 4.

disable ndu service in windows

After making changes, you need to restart your computer.

Using PoolMon to Find a Kernel-Mode Memory Leak

You can try to identify the driver that caused the memory leak in the non-paged pool.  To do this, we need the Poolmoon.exe console tool included in the Windows Driver Kit (WDK). Download and install the WDK for your Windows version from Microsoft. Then start the Poolmon.exe (in case of WDK for Windows 10, the tool is located in C:Program Files (x86)Windows Kits10Tools folder).

After you have started the tool, press P.  The second column will display the tags of the processes that use non-paged memory (the Nonp attribute). Then press the B key to sort the driver list by the Bytes column.

Check non-paged pool usage with PoolMon.exe tool

The left column lists the driver tags. Your task is to identify the driver file using this tag. In our example, you can see that most of the RAM in the non-paged pool is used by drivers with tags Nr22, ConT, and smNp.

You should check drivers for found tags using the strings.exe tool (from Sysinternals), using the built-in findstr command, or using PowerShell.

Use the following commands to find the driver files associated with the tags you found:

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

Or, you can also use PowerShell:

Set-Location "C:WindowsSystem32drivers"
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

You can map driver files for tags directly in poolmon.exe. To do this, make sure the pooltag.txt file is in the tool directory. You can copy pooltag.txt from the WDK installation directory or download it from GitHub. Run the poolmon as follows:

poolmon /g

using pooltag.txt in poolmon to show mapped_driver files

Note that the driver name is now displayed in the Mapped_driver column.

So we have got the list of driver files that may cause the problem. Now you have to identify what drivers and system components these files refer to by their names. To do it, you can use the sigcheck tool from Sysinternals.

sigcheck C:WindowsSystem32driversrdyboost.sys

The tool returns the name, description, and version of the driver or Windows component.

sigcheck - get windows component/driver by sys file

Now you can try to uninstall/update/reinstall the problem driver or service.

If a memory leak resulted in a BSOD, you can identify the problematic driver in a memory dump file.

  1. Load a memory dump into the Windbg debugger;
  2. Run the command: !vm
  3. If the NonPagedPool Usage value is greater than NonPagedPool Max, it means that the non-paged pool is exhausted;
  4. Check the contents of the pool with the command (results will be sorted by non-paged pool usage): !poolused 2
  5. After getting the driver tag, find the driver file using findstr or strings.exe as described above.

Install the Latest Versions of Network Adapter Drivers

Try to download and install the latest driver versions for your network adapters from the vendor’s website.

If the automatic driver update is enabled in Windows, check to see if problems started after installing new drivers. Try to roll back to the previous driver version and see if the problem persists. If the problem is solved, disable automatic driver update.

Disable the Hyper-V Role

In some cases, the installed Hyper-V role is causing a memory leak to the non-paged pool. If you don’t need this role, we recommend to disable it.

On Windows Server you can disable the Hyper-V role with the PowerShell command:

Remove-WindowsFeature -Name Hyper-V

The command for Windows 10:

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

If your search does not return any results, check if the memory leak was caused by a user-mode process. Open the Task Manager, go to the Details tab, add the NP Pool column and look for processes with a large memory size in the non-paged pool.

show non-paged pool in task manager for processes

This guide is applicable both for Windows Server 2019/2016/2012R and desktop Windows 10/8.1.

  • На главную
  • Категории
  • Операционные системы
  • Невыгружаемый пул оперативной памяти

Невыгружаемый пул оперативной памяти

Добрый день. Есть терминальный сервер, работает на Windows Server 2012 R2 на VMWare. Столкнулись с проблемой — куда то уходит оперативная память. А уходит она — в невыгружаемый пул.

2017-03-29 05:28:5042

Невыгружаемый пул оперативной памяти

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

Данная инструкция подходит как для Windows Server 2012 — 2016, так и для Windows 8, 8.1, 10.

Отключаем невыгружаемый пул оперативной памяти

Способ 1:

1. Открываем окно «Выполнить» нажатием клавиш Win+R

2. Вводим команду sc config NDU start= disabled

Все, перезагружаемся и радуемся.

Способ 2:

1. Идем в реестр, для этого так же вызываем «Выполнить» и пишем там «regedit»

2. Идем в ветку — HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNdu

3. Находим параметр Start и меняем его на 4

Все, перезагружаемся.

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

Так же можно попробовать это исправить обновив драйвера на сетевую карту. Если производитель сетевой карты исправил это в драйверах — хорошо. Если он этого не сделал, то данная статья поможет вам на 100% избавиться от данной проблемы.

Надеюсь данная статья помогла вам. Если возникают какие-либо вопросы — задавайте их в комментариях.

Максим Орлов

Ваш покорный слуга — компьютерщик широкого профиля: системный администратор, вебмастер, интернет-маркетолог и много чего кто. Вместе с Вами, если Вы конечно не против, разовьем из обычного блога крутой технический комплекс.

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

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

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

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

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

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

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

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

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

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

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

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

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

Выяснить конкретные драйверы, приводящие к тому, что невыгружаемый пул памяти растет можно с помощью инструмента 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). Невыгружаемый пул в утилите Poolmon
  4. Обратите внимание на значение столбца Tag для занимающей наибольшее количество байт записи.
  5. Откройте командную строку и введите команду findstr /m /l /s значение_столбца_tag C:WindowsSystem32drivers*.sys Поиск драйвера, вызывающего утечку памяти
  6. Вы получите список файлов драйверов, которые могут оказаться причиной проблемы.

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

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

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

Источник

Проблема высокой загрузки памяти системным файловым кэшем на Windows Server 2008 R2

На одном из файловых серверов под управлением Windows Server 2008 R2 обнаружилась проблема с высокой загрузки оперативной памяти (RAM), выливающаяся в проблемы с производительностью сервера и запущенных на нем служб. Как оказалось, память забивалась системным файловым кэшем с метаданными файловой системы. Проблеме потенциально подвержены все файловые сервера с большим количеством файлов, к которым обращаются пользователя. Наиболее критична проблема для 64 битных версий Windows, на которых размер метафайла в памяти может занять практически всю емкость установленной оперативной памяти. В статье разберемся как проявляется проблема, выявим ее источники и способы решения.

Высокая загрузка оперативной памяти на файловом сервере Windows

Проблема проявляется следующим образом: в диспетчере задач (Task Manager) видим, что на сервере оперативная память занята на 95-99%.

Перейдя на вкладку процессов, не удастся найти какой-то утекший процесс с аномально высоким потреблением памяти. Кроме того, если навскидку сложить память, занятую всеми процессами, отображаемыми в диспетчере задач, даже близко не удается приблизиться к 50% физической памяти, установленной на сервере. Так кто же съел всю память?

Реальный расклад по использованию оперативной памяти может дать утилита RAMMap (Марка Руссиновича). Качаем архив с утилитой и запускаем из архива файл RAMMap.exe с правами администратора. На вкладке Use Counts, видим, что больше всего физической памяти использует объектом Metafile (в нашем случае на него приходится 11 из 25 Гб оперативной памяти сервера).

Что такое метафайл в Windows?

Метафайл (Metafile) — это часть системного кэша, который содержит метаданные файловой системы NTFS и используется для увеличения быстродействия файловой системы при доступе к файлам. Метаданные NTFS включают в себя данные таблицы MFT (Master File Table). Для каждого файла/папки, к которому обращались пользователи, в метафайле создается соответствующий блок, размером как минимум 1 Кб (запись об атрибуте каждого файла занимает 1кб, и каждый файл имеет как минимум один атрибут). Таким образом, на файловых серверах с большим количеством файлов, к которым идут постоянные обращения, размер системного кэша NTFS (метафайла) может достигать нескольких гигабайт.

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

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

К примеру, оценить размер MFT таблицы можно с помощью еще одной утилиты Руссиновича – ntfsinfo. К примеру, в нашем примере для 2 Тб диска размер MFT таблицы составляет 13 Гб.

Быстрая очистка метафайла MFT в памяти

Утилита RAMMap предоставляет возможность быстрой очистки используемой памяти от мусора без необходимости перезагрузки сервера. Для этого нужно в меню выбрать раздел Empty -> Empty System Working Set. После этой операции размер памяти под metafile уменьшился в десятки раз, а процент использования RAM сервером упал с 95% до 26%.

Основной недостаток такого метода – процесс очистки ручной и никак не автоматизируется.

Служба Dynamic Cache Service для управления файловым кэшем

Другим, более кардинальным, решением проблемы высокой загрузки оперативной памяти метафайлом файловой системы является установка службы Dynamic Cache Service (http://www.microsoft.com/en-us/download/details.aspx?id=9258). Данная служба через системные API позволяет управлять параметрами выделяемого кэша.

Установка DynCache довольно простая (подробные инструкции есть в архиве с программой).

  1. Копируем файл в DynCache.exe в каталог %SystemRoot%System32
  2. Создадим службу DynCache командой sc create DynCache binpath= %SystemRoot%System32DynCache.exe start= auto type= own DisplayName= «Dynamic Cache Service»
  3. Импортируем файл DynCache.reg в реестр (содержит дефолтные значения)
  4. Изменим значения следующих ключей реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDynCacheParameters
    • MaxSystemCacheMBytes: 4096 (dec) – максимальный размер кэша
    • MinSystemCacheMBytes: 100 (dec) – минимальный размер

В нашем случае, после установки службы DynCache, использование памяти метафайлом перестало превышать заданного нами значения 4 Гб. Пользователи каких-либо проблем с ухудшением производительности файлового сервера не выявили.

Источник

Невыгружаемый пул оперативной памяти

Добрый день. Есть терминальный сервер, работает на Windows Server 2012 R2 на VMWare. Столкнулись с проблемой — куда то уходит оперативная память. А уходит она — в невыгружаемый пул.

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

Данная инструкция подходит как для Windows Server 2012 — 2016, так и для Windows 8, 8.1, 10.

Отключаем невыгружаемый пул оперативной памяти

Способ 1:

1. Открываем окно «Выполнить» нажатием клавиш Win+R

2. Вводим команду sc config NDU start= disabled

Все, перезагружаемся и радуемся.

Способ 2:

1. Идем в реестр, для этого так же вызываем «Выполнить» и пишем там «regedit»

2. Идем в ветку — HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNdu

3. Находим параметр Start и меняем его на 4

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

Так же можно попробовать это исправить обновив драйвера на сетевую карту. Если производитель сетевой карты исправил это в драйверах — хорошо. Если он этого не сделал, то данная статья поможет вам на 100% избавиться от данной проблемы.

Надеюсь данная статья помогла вам. Если возникают какие-либо вопросы — задавайте их в комментариях.

Источник

Понравилась статья? Поделить с друзьями:
  • Non unicode windows 10 как изменить
  • Non system disk press any key windows 10
  • Non plug and play drivers windows
  • Nokia тест монитора windows 10 x64
  • Nokia программа для синхронизации с пк windows 10