Cómo solucionar problemas de alto uso de memoria del pool no paginado en Windows

Lidiar con fugas de memoria en equipos Windows, especialmente cuando el pool no paginado empieza a crecer sin control, es bastante molesto. Normalmente, esto se ve en la pestaña Rendimiento del Administrador de tareas, donde el pool no paginado puede dispararse hasta varios gigabytes, muy por encima de los 200-400 MB habituales. Esto puede causar desde lentitud hasta fallos. Normalmente, se debe a un mal funcionamiento o conflicto de controladores, a menudo controladores de red. Reiniciar el sistema lo «arregla» temporalmente, pero obviamente, se busca una solución más permanente, especialmente en un servidor que funciona 24/7. Así que, aquí tienes un resumen de lo que ha funcionado en las trincheras, con algunos detalles técnicos esparcidos por todas partes.

Cómo solucionar fugas de memoria en grupos no paginados en Windows

Deshabilitar el controlador de monitoreo del uso de datos de red

Muchas veces, el problema reside en el controlador del monitor de actividad de red, llamado NDU ( %WinDir%\system32\drivers\Ndu.sys).Las tarjetas de red Killer y MSI suelen entrar en conflicto con este controlador. Si observa que el grupo no paginado crece constantemente al intentar transferir archivos grandes, o si los registros de eventos muestran errores como » El servidor no pudo asignar desde el grupo no paginado del sistema «, deshabilitar este controlador podría ser útil. Es un poco extraño, pero deshabilitar el servicio NDU o la entrada de registro puede solucionar el problema.

  • Detenga el controlador mediante el símbolo del sistema o PowerShell:
sc config NDU start= disabled
  • O, si prefiere el método de registro, abra regedit.exe y navegue a:
  • HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\
  • Cambie el valor de Inicio a 4 (que deshabilita el controlador en el próximo arranque).
  • Después de esto, es imprescindible reiniciar. En algunas configuraciones, esto no se soluciona de inmediato, así que si el problema persiste, inténtalo de nuevo o comprueba si hay controladores de red conflictivos (como Killer o MSI).En algunas máquinas, deshabilitar este servicio inicialmente causa pequeños problemas, pero en general reduce la fuga; es una compensación. Ten en cuenta que esto no es la solución milagrosa en todos los casos, pero vale la pena intentarlo.

    Utilice PoolMon para localizar el controlador que causa la fuga

    Si el problema persiste y quieres investigar más a fondo, PoolMon (Monitor de Piscina) es tu mejor aliado: un poco técnico, pero eficaz. Debes descargarlo del Kit de Controladores de Windows (WDK). Una vez instalado, ejecuta Poolmon.exe, idealmente como administrador.

    Cuando se abra, presione P para ver las etiquetas de grupo que usan memoria no paginada con más frecuencia. Luego, presione B para ordenar por bytes. Esto le ayudará a ver qué controladores están consumiendo memoria. Busque etiquetas como Nr22, ConT o smNp. El siguiente paso es identificar a qué archivos de controlador o hardware están vinculadas esas etiquetas, usando herramientas como strings.exe de Sysinternals o el comando findstren el Símbolo del sistema o PowerShell.

    findstr /m /l /s Nr22 %SystemRoot%\System32\drivers\*.sys

    Si prefieres PowerShell:

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

    Una vez que identifique los controladores sospechosos (por ejemplo, rdyboost.sys o rsmnp.sys ), verifique sus detalles con SigCheck de Sysinternals:

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

    Esto le proporciona información sobre la versión del controlador, su descripción, etc. Es posible que deba actualizar, revertir o deshabilitar esos controladores si sospecha que están causando la fuga. Si ve una pantalla azul de la muerte relacionada con el agotamiento de la memoria, también puede analizar un volcado de memoria con WinDbg y ejecutar comandos como !vmo !poolused 2para encontrar la etiqueta del controlador defectuoso.

    Mantenga los controladores actualizados o desactívelos

    En la mayoría de los sistemas modernos, los controladores de red obsoletos o con errores son los principales candidatos. Visite el sitio web del proveedor (Intel, Realtek, Killer, MSI, etc.) y descargue los controladores más recientes. A veces, Windows Update falla, por lo que actualizar manualmente puede ser útil. Si el problema comenzó después de actualizar un controlador, considere revertir a una versión anterior. Esto suele restaurar la estabilidad.

    Desactivar Hyper-V si no es necesario

    Hyper-V, la plataforma de virtualización, a veces filtra memoria en el pool no paginado, especialmente si está habilitado pero no se utiliza. Si Hyper-V está instalado pero no se utiliza, deshabilitarlo puede liberar recursos.

    • En PowerShell, para Windows Server:
    Remove-WindowsFeature -Name Hyper-V
  • En Windows 10, utilice:
  • Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

    Si estos comandos no devuelven nada o Hyper-V no está instalado, verifique si hay algún proceso o máquina virtual en ejecución que pueda estar causando fugas. En el Administrador de tareas, agregue la columna «Grupo NP» (haciendo clic derecho en los encabezados de columna y seleccionando «Seleccionar columnas «) y observe si hay procesos con un uso excesivo del grupo no paginado.

    Este es un tema bastante amplio: cada configuración reacciona de forma diferente. Sin embargo, estos pasos han ayudado a erradicar algunas de las causas comunes, especialmente en servidores o instalaciones de Windows muy personalizadas.