Búsqueda de sitios web

Alto uso de memoria de grupo no paginado (pérdida) en Windows


Las computadoras y los servidores de Windows pueden experimentar problemas con el desbordamiento de la memoria causado por una fuga de un determinado controlador del sistema que almacena sus datos en el grupo de memoria no paginada del sistema. El grupo de memoria no paginadol son datos en la memoria RAM de la computadora utilizados por el kernel y los controladores del sistema operativo. El grupo no paginado nunca se intercambia en el disco (al archivo de paginación), siempre se almacena solo en la memoria física.

Puede ver el tamaño actual de la memoria no paginada en la sección Memoria de la pestaña Rendimiento en el Administrador de tareas. La siguiente captura de pantalla muestra que casi toda la memoria del servidor está ocupada y la mayor parte está ocupada por el grupo no paginado de 4,2 GB. Normalmente, el tamaño del grupo no paginado rara vez supera los 200-400 MB. Un gran tamaño de grupo no paginado a menudo indica que hay una pérdida de memoria en algún componente del sistema o controlador de dispositivo.

Si hay una pérdida de memoria en el grupo no paginado del servidor, aparecerán los siguientes eventos en el registro de eventos del sistema:

ID de evento: 2019
Origen: Srv
Descripción:

The server was unable to allocate from the system nonpaged pool because the pool was empty

En la mayoría de los casos, el motivo de la pérdida de memoria descrita anteriormente son algunos problemas con los controladores de terceros instalados en Windows. Como regla general, estos son controladores de red. Por favor, preste atención al comportamiento del grupo al descargar archivos grandes (lo más probable es que crezca rápidamente).

Tamaño máximo de grupo no paginado en Windows:

  • Windows x64 hasta 128 Gb y no más del 75% de la memoria física

  • Windows x86 hasta 2 Gb y no más del 75% de RAM

Solo el reinicio de Windows ayuda a limpiar el grupo no paginado. Puede ser aceptable para un dispositivo doméstico, pero debería encontrar una mejor solución para un servidor que funcione las 24 horas del día, los 7 días de la semana.

Deshabilitar el controlador de monitoreo de uso de datos de red

Muy a menudo, el motivo de una fuga de memoria en el grupo no paginado es la incompatibilidad del controlador de supervisión de la actividad de la red (Uso de datos de red: NDU,

%WinDir%\system32\drivers\Ndu.sys

) con los controladores del adaptador de red. La mayoría de las veces, los controladores de tarjetas de red Killer Network y MSI entran en conflicto con el controlador NDU. Este servicio se puede deshabilitar sin mucha pérdida de la funcionalidad de Windows.

Detenga el servicio NDU con el comando:

sc config NDU start= disabled

O a través del registro:

  1. Abra el Editor del Registro (regedit.exe);

  2. Vaya a la clave de registro HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\;

  3. Cambie el valor del parámetro Inicio a 4.

Después de realizar los cambios, debe reiniciar su computadora.

Uso de PoolMon para encontrar una fuga de memoria en modo kernel

Puede intentar identificar el controlador que causó la pérdida de memoria en el grupo no paginado. Para ello, necesitamos la herramienta de consola Poolmoon.exe incluida en el Kit de controladores de Windows (WDK). Descargue e instale el WDK para su versión de Windows de Microsoft. Luego inicie Poolmon.exe (en el caso de WDK para Windows 10, la herramienta se encuentra en

C:\Program Files (x86)\Windows Kits\10\Tools\

carpeta).

Después de haber iniciado la herramienta, presione P. La segunda columna mostrará las etiquetas de los procesos que usan memoria no paginada (el atributo Nonp). Luego presione la tecla B para ordenar la lista de controladores por la columna Bytes.

La columna de la izquierda enumera las etiquetas de los controladores. Su tarea es identificar el archivo del controlador usando esta etiqueta. En nuestro ejemplo, puede ver que la mayor parte de la RAM en el grupo no paginado es utilizada por controladores con etiquetas Nr22, ConT y smNp .

Debe verificar los controladores en busca de etiquetas encontradas usando el

strings.exe

herramienta (de Sysinternals), usando el integrado

findstr

comando o usando PowerShell.

Use los siguientes comandos para encontrar los archivos del controlador asociados con las etiquetas que encontró:

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

O también puede usar 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

Puede asignar archivos de controlador para etiquetas directamente en poolmon.exe. Para hacer esto, asegúrese de que el archivo pooltag.txt esté en el directorio de la herramienta. Puede copiar pooltag.txt del directorio de instalación de WDK o descargarlo de GitHub. Ejecute el poolmon de la siguiente manera:

poolmon /g

Tenga en cuenta que el nombre del controlador ahora se muestra en la columna Mapped_driver.

Así que tenemos la lista de archivos de controladores que pueden causar el problema. Ahora debe identificar a qué controladores y componentes del sistema se refieren estos archivos por sus nombres. Para hacerlo, puede usar la herramienta sigcheck de Sysinternals.

sigcheck C:\Windows\System32\drivers\rdyboost.sys

La herramienta devuelve el nombre, la descripción y la versión del controlador o componente de Windows.

Ahora puede intentar desinstalar/actualizar/reinstalar el controlador o servicio problemático.

Si una fuga de memoria resultó en un BSOD, puede identificar el controlador problemático en un archivo de volcado de memoria.

  1. Cargue un volcado de memoria en el depurador de Windbg;

  2. Ejecute el comando:

    !vm
  3. Si el valor NonPagedPool Usage es mayor que NonPagedPool Max, significa que el grupo no paginado está agotado;

  4. Verifique el contenido del grupo con el comando (los resultados se ordenarán por el uso del grupo no paginado):

    !poolused 2
  5. Después de obtener la etiqueta del controlador, busque el archivo del controlador usando

    findstr

    o

    strings.exe

    como se describió anteriormente.

Instale las últimas versiones de los controladores del adaptador de red

Intente descargar e instalar las últimas versiones del controlador para sus adaptadores de red desde el sitio web del proveedor.

Si la actualización automática de controladores está habilitada en Windows, verifique si los problemas comenzaron después de instalar nuevos controladores. Intente volver a la versión anterior del controlador y vea si el problema persiste. Si el problema se resuelve, deshabilite la actualización automática del controlador.

Deshabilitar el rol de Hyper-V

En algunos casos, el rol de Hyper-V instalado provoca una pérdida de memoria en el grupo no paginado. Si no necesita este rol, le recomendamos que lo deshabilite.

En Windows Server, puede deshabilitar el rol de Hyper-V con el comando de PowerShell:

Remove-WindowsFeature -Name Hyper-V

El comando para Windows 10:

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

Si su búsqueda no arroja ningún resultado, verifique si la pérdida de memoria fue causada por un proceso en modo de usuario. Abra el Administrador de tareas, vaya a la pestaña Detalles, agregue la columna Grupo de NP y busque procesos con un tamaño de memoria grande en el grupo no paginado.

Esta guía es aplicable tanto para Windows Server 2019/2016/2012R como para Windows 10/8.1 de escritorio.

Artículos relacionados