2013-11-12 01:10:06 +0000 2013-11-12 01:10:06 +0000
75
75

Windows utiliza demasiada RAM, cómo diagnosticar el acaparamiento de recursos

Tengo 16 GB de RAM del sistema. Al iniciarse sin aplicaciones abiertas, excepto el administrador de tareas, Windows está usando unos 3 GB de RAM. He mirado en la pestaña de procesos, pero no parece haber nada fuera de lo normal. ¿Cómo puedo saber por qué mi Windows está usando tanta RAM?

todos los procesos de todos los usuarios


Leyendo en el poolmon parece que mi controlador inalámbrico broadcom está usando unos 0,4GB de RAM. Incluso si lo quito seguiría usando 2,6GB en el arranque, lo que sigue siendo demasiado.

  • *

Después de reinstalar el controlador inalámbrico asociado a la fuga de memoria. Tengo una nueva captura de pantalla y me gustaría confirmar que efectivamente era una fuga de memoria.

Respuestas (4)

85
85
85
2013-11-12 04:54:18 +0000

Tienes una fuga de memoria causada por un controlador. Mira el alto valor de la memoria del kernel no paginada. En tu caso es de más de 3,7 GB. Puede usar poolmon para ver qué controlador está causando el alto uso.

Instale el Windows WDK , ejecute poolmon, ordénelo a través de la P después del tipo de pool para que el no paginado esté en la parte superior y a través de la B después de los bytes para ver la etiqueta que utiliza más memoria. Ejecute poolmon yendo a la carpeta en la que está instalado el WDK, vaya a Herramientas (o C:\N-Archivos de Programa (x86)\N-Windows Kits\10\N-Tools\Nx64) y haga clic en poolmon.exe.

Ahora mire qué etiqueta de piscina utiliza más memoria como se muestra aquí:

Ahora abra un cmd prompt y ejecute el comando findstr. Para ello, abra el símbolo del sistema y escriba “cd C:\Windows\System32\drivers”, sin las comillas. A continuación, escriba “findstr /s __ .”, donde __ es la etiqueta (nombre más a la izquierda en poolmon). Haga esto para ver qué controlador utiliza esta etiqueta:

Ahora, vaya a la carpeta de controladores (C:\Windows\System32\drivers) y haga clic con el botón derecho en el controlador en cuestión (intmsd.sys en el ejemplo de la imagen anterior). Haga clic en Propiedades, vaya a la pestaña de detalles para encontrar el Nombre del producto. Busque una actualización para ese producto.

Si el pooltag sólo muestra los controladores de Windows o aparece en el pooltag.txt ("C:\Program Files (x86)\Windows Kits.1\Debuggers\x64\triage\pooltag.txt")

tiene que usar xperf para rastrear lo que causa el uso . Instale el WPT del SDK de Windows , abra un cmd.exe como administrador y ejecute esto:

xperf -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree+PoolAllocSession+PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\pool.etl

captura 30 -60s del crecimiento. Abrir el ETL con WPA.exe, añadir los gráficos del Pool al panel de análisis.

Poner la columna pooltag en primer lugar y añadir la columna stack. Ahora cargue los símbolos dentro de WPA.exe y expanda la pila del tag que vio en poolmon.

Ahora busca otros drivers de terceros que puedas ver en la pila. Aquí la etiqueta Thre (Thread) es utilizada por AVKCl.exe de G-Data. Busque las actualizaciones de los controladores/programas para solucionarlo.

15
15
15
2013-11-12 05:41:48 +0000

Bueno, lo primero, antes de entrar en una respuesta más detallada. En tu primera captura de pantalla, tu Non-Paged Pool (un tipo de uso de memoria del kernel) está en 1,3GB. Eso me parece inusualmente alto, especialmente para sólo 30 minutos después del arranque. Supongo que podría ver el NP Pool llegar a ese nivel después de una cantidad prolongada de uso o con un programa que estuviera goteando como un colador. Por el contrario, mi NP Pool suele estar entre 100 y 200 megabytes, y mi pool paginado puede llegar a ser de 400 o 500 (y eso después de tener mi sistema funcionando sin reiniciar durante semanas).


Puede habilitar algunas columnas adicionales en el Administrador de Tareas haciendo clic con el botón derecho del ratón en los encabezados de las columnas, y eligiendo seleccionar columnas. Deberías añadir Working Set (private), Working Set (shared), Commit y NP Pool. Yo escanearía todos tus procesos de todos los usuarios, y vería si alguno de ellos tiene un NP Pool de más de unos 256KB. Si ves alguno, especialmente alguno que sea considerablemente más alto, ese podría ser el origen del problema, o al menos parte de él.

Su conjunto total de trabajo, la cantidad de memoria física en uso por un proceso, es la combinación de los conjuntos de trabajo privados y compartidos (WS). El privado suele ser mayor para la mayoría de los procesos, sin embargo puede haber algunos que utilicen una mayor cantidad de WS compartido. Normalmente, ambos deberían sumar el total de WS. El compromiso es la cantidad de su conjunto de trabajo que ha sido comprometido con el almacén de respaldo (en la mayoría de los casos, el archivo de páginas de Windows). Las aplicaciones en segundo plano suelen tener un Commit mayor que el WS, lo que indica que gran parte de su conjunto paginado ha sido intercambiado fuera de la memoria y dentro de su archivo de paginación (lo que es bastante normal para las aplicaciones de escritorio que han sido minimizadas y no se han utilizado durante un tiempo).

La reserva no paginada es la memoria que no puede, y nunca será, intercambiada fuera de la memoria física… que es efectivamente su uso mínimo de memoria física permanente. La memoria NP Pool a menudo contiene código de programa y secciones críticas que deben estar en la memoria física para que se comporten correctamente o de forma segura, montones especiales, etc. De 60 procesos, si todos ellos tienen 256KB de memoria NP Pool, entonces su uso mínimo absoluto de memoria física sería de alrededor de 15,360KB. En la mayoría de los casos, una o dos aplicaciones pueden tener un NP Pool de 256KB, mientras que la mayoría tienen menos, a menudo considerablemente menos (o ninguno). Es muy poco probable que el sistema pague la totalidad del conjunto de procesos de trabajo, así que no esperes nunca que el uso de la memoria sea tan bajo.

  • *

Finalmente, el objetivo de tener más memoria es evitar tener que paginar los datos desde y hacia el espacio de memoria extendido (swap, archivo de página) en un disco físico. La paginación es un proceso que implica mover bloques de memoria física asignada, empujando algunos al disco, y trayendo otros a la memoria física desde el disco. La paginación es, para simplificar, altamente indeseable. No es “malo” per se, pero puede ser un verdadero lastre para el rendimiento cuando ocurre con demasiada frecuencia. El objetivo final de aumentar la RAM física total en un sistema es permitir que más procesos mantengan más de su cometido en la memoria física (conjunto de trabajo más grande). El consumo de memoria no es un problema, y cuando más procesos en ejecución utilizan más memoria, el rendimiento total del sistema y el rendimiento de los procesos activos será normalmente mayor, ya que la actividad del disco físico relacionada con los accesos a la memoria (fallos de página, específicamente) será menor.

Windows gestiona la memoria por usted, y automáticamente pagina los datos dentro y fuera de la memoria hacia y desde el archivo de página (swap) por usted. Si ejecutas un proceso que necesita 9GB de memoria y tu sistema ya está usando 4GB (de 12GB), entonces el sistema averiguará automáticamente qué procesos no necesitan acceso inmediato a todo su conjunto de trabajo, y paginará parte o todo su pool paginado a swap para liberar ese 1GB extra. Si su proceso grande necesita eventualmente más memoria, windows reducirá aún más el conjunto de trabajo de otros procesos hasta que tenga suficiente espacio libre para asignar el nuevo bloque solicitado. Su proceso grande podría eventualmente consumir toda la memoria disponible, excepto NP Pool y tal vez alguna sobrecarga mínima adicional para los procesos que se ejecutan periódicamente y que no permiten a Windows liberar más de su conjunto de trabajo (es decir, tienen fallas de página pendientes que Windows intercambiaría de otra manera fuera de la memoria física, pero debido a que están siendo solicitadas, no pueden ser movidas).

Si un proceso necesita más memoria de la que se le permite acceder (los procesos de 32 bits normalmente pueden acceder a 2Gb, y algunos a algo menos de 4Gb con técnicas mejoradas, mientras que los procesos de 64 bits normalmente pueden acceder a unos 48Gb de memoria, cada uno), entonces windows a veces intentará virtualizar su memoria con espacio de intercambio. Si una aplicación de 32 bits quiere usar su máximo permitido de 2Gb de espacio, pero sólo hay 1,2Gb disponibles, windows reservará los 2Gb completos en el archivo de página, y moverá los datos propios del proceso dentro y fuera del archivo de página según sea necesario para soportar el uso de memoria de la aplicación. El uso total de “memoria” en este caso puede parecer mayor que la memoria física disponible, cuando se va por Total Commit. El Total Commit suele alcanzar el tamaño máximo del archivo de página total, que cuando es gestionado por el sistema, suele ser 2-3 veces la cantidad de memoria física. En su caso, el Total Commit sería alrededor de 24Gb, o 2 veces su memoria física de 12Gb (y esto se indica en su primera captura de pantalla, donde dice: Commit (GB) 3 / 23).

  • *

Un último punto. Usted dijo en su respuesta que tenía 16Gb de RAM, mientras que el Administrador de Tareas sólo ve 12Gb de RAM. Una de dos cosas aquí. O bien su sistema realmente sólo tiene 12Gb de RAM, o uno de sus palos no se está registrando correctamente. Si un stick de RAM (estoy asumiendo 4x sticks de 4Gb), puede estar mal, puede no estar asentado del todo bien en tu placa base, o tu placa base puede tener un problema de detección de memoria.

Para comprobar si es esto último, primero deberías actualizar la BIOS de tu placa base a la última versión. Tuve un problema similar… mis seis barras de memoria DDR3 de triple canal (6x 2Gb) estaban todas bien según las pruebas individuales de cada una… pero mi placa base decidía aleatoriamente no contar una o dos de ellas de vez en cuando, dejándome a menudo con sólo 8Gb de memoria. Una actualización de la BIOS solucionó el problema, y ahora tengo acceso fiable a los 12Gb de mi memoria.

12
12
12
2013-11-12 01:35:00 +0000

¿Cómo puedo averiguar por qué mi Windows está usando tanta RAM.

Utiliza tanta RAM porque está diseñado para ello. No hay ningún coste asociado al uso de la RAM. De hecho, la RAM usada es mejor que la RAM libre porque el sistema operativo no tiene que hacer nada para usarla. Usar la RAM libre requiere hacerla usar, lo que requiere un esfuerzo.

Si estás pensando “quiero mi RAM libre ahora para poder usarla más tarde”, olvídalo. La RAM no tiene que estar libre ahora para poder usarla después. Puedes usarla ahora y usarla después. No hay ningún compromiso aquí - no hay absolutamente ninguna desventaja en el uso de la RAM.

La RAM se mantiene usada y se cambia directamente de un uso a otro sin tener que pasar por el esfuerzo de dejarla libre sólo para tener que volver a usarla. Los sistemas operativos modernos dejan la RAM libre sólo cuando no tienen otra opción.

2
2
2
2017-01-14 12:37:08 +0000

Una razón no mencionada anteriormente es Hyper-V.

Pude identificarlo con la excelente utilidad RamMap :

La captura de pantalla es de después. Antes el “Driver Locked” tenía más de 6GB de memoria, más del 80% de la RAM en esta máquina en particular. Tuve que entrar en el Hyper-V Manager y desactivar la “Memoria Dinámica”. Curiosamente, incluso después de volver a habilitarla, la memoria “Driver Locked” se mantuvo baja - sólo puedo suponer que las instancias anteriores la aumentaron y que Hyper-V no reduce automáticamente su memoria asignada: