He notado esto en muchas máquinas Windows diferentes, en muchas ocasiones diferentes: el uso de RAM informado por el Administrador de tareas o el Monitor de recursos a menudo parece sumar una cantidad que es significativamente menor que la cantidad real en uso.
Por ejemplo, muchas veces en mi computadora portátil o en mi computadora de escritorio, he visto algo como 7GB en uso, y sin embargo, el total del conjunto de RAM de trabajo es más parecido a 3GB. ¡No puedo entender dónde se está usando!
Aquí hay un ejemplo extremo que noté hoy en Resource Monitor en un servidor:
Haga clic para tamaño completo
Si hace clic con el botón derecho en la imagen y se abre en una nueva pestaña, y ve los números, notará que el Conjunto de trabajo (que no incluye memoria virtual no física) suma aproximadamente 1.7GB. Obtengo números similares al agregar el uso de RAM en el Administrador de tareas cuando se habilita "Mostrar procesos de todos los usuarios".
Ahora aquí hay una captura de pantalla de la pestaña Rendimiento del administrador de tareas:
Haga clic para tamaño completo
Esto dice que se usan 7,6 GB de memoria física.
Lo veo todo el tiempo, en computadoras personales, computadoras portátiles y ahora en servidores: el uso total de RAM informado por las herramientas del sistema solo representa aproximadamente 1/4 del uso de RAM que observo. ¿¿¿Que diablos está pasando???
¿Hay alguna explicación satisfactoria de dónde está toda mi RAM? ¿Qué lo engulle y por qué no deja rastro?
EDITAR: Aquí hay una imagen del uso gráfico de RAM, como lo solicitó el usuario:
Haga clic para tamaño completo
EDITAR 2: en respuesta a la respuesta de James, aquí hay una imagen de los procesos no paginados poolmon.exe
, ordenados por tamaño:
Estos resultados me confunden. poolmon
indica correctamente que tengo 6 GB de grupo no paginado en uso, pero todos los procesos de grupo no paginado tienen un tamaño inferior a 8 MB.
¿Qué podría significar esto? ¿No se poolmon
detectan algunos de los procesos que usan el grupo no paginado?
fuente
Respuestas:
Lo siento, sé que esto suena como una respuesta frívola ... pero la respuesta a la pregunta en su título es "porque no se supone que lo hagan".
O para decirlo de manera más cortés: se usa mucho la RAM que no está en los conjuntos de trabajo privados de los procesos. Parte de esto está en los conjuntos de trabajo compartidos de los procesos, pero no se puede obtener una noción confiable del uso real allí, debido al uso compartido; Sumar los números de los procesos le dará un resultado demasiado grande.
Otras cosas que ocupan RAM, como el grupo no paginado, la parte residente del grupo paginado y las partes residentes de otros usos del espacio del núcleo, no se muestran en absoluto en la pantalla de "procesos" del Administrador de tareas.
Con respecto a su problema específico:
En la pantalla del Administrador de tareas, consulte la sección "memoria del núcleo". Tiene 6 GB de "memoria no paginada" (es decir, grupo no paginado). Eso es parte de la sección "En uso" en su segundo gráfico. El grupo no paginado no se carga a ningún proceso, por lo que sumar los números por proceso en el administrador de tareas no se acerca al total en uso. Es probable que algún controlador lo esté usando. Esta es una cantidad totalmente excesiva; debería estar por debajo de 1 GB. cualquier controlador responsable de la parte excesiva del uso de la agrupación no paginada es indudablemente defectuoso.
RAMmap puede confirmar esto (en su pestaña "Usar recuentos", mire el total de "Grupo no paginado") pero no puede ayudarlo a encontrar qué controlador lo está causando.
Aquí se explica cómo encontrarlo: obtenga una copia de la herramienta de Microsoft "poolmon". Es una herramienta en modo personaje (chico, lo es) distribuida con el Kit de controladores de Windows. Para Windows 7, el WDK es una descarga gratuita . Tienes que descargar todo (es un ISO) e instalarlo desde allí, pero puedes elegir instalar solo las herramientas, si eso es todo lo que quieres.
Busque poolmon en los directorios WDK, asegúrese de elegir el correcto, de 32 o 64 bits, y ejecútelo desde el símbolo del sistema del administrador. Obtendrá una pantalla como esta:
Ahora, presione la tecla "p" (no, no estoy bromeando. ¡No hay menús aquí!) Hasta que la columna "Tipo" muestre solo "Nonp". Luego presione "b" (dos veces si es necesario) para ordenar la pantalla en orden descendente por la columna Bytes (que ya se hizo en la muestra aquí).
Luego mire la columna "Etiqueta" para la línea superior. En el caso (obviamente artificial) que se muestra aquí es "Fuga". (Este sistema está ejecutando un controlador que fue molestado deliberadamente para causar este problema, es un grupo no paginado "con fugas").
por cierto, las líneas resaltadas son las que han cambiado desde la actualización anterior de esta pantalla arcaica.
Ahora busque en c: \ Windows \ System32 \ Drivers un archivo .sys que contenga esa cadena. En este caso, estaría buscando "Fuga", así:
Luego busque en la web referencias a esa cadena y / o ese nombre de controlador.
También sería útil regresar aquí e informar el nombre completo, el nombre del fabricante, etc. del archivo .sys.
(Mi apuesta es que la etiqueta que encuentre será ECMC, el controlador es intmsd.sys y está asociado con un producto llamado ExpressCache o IntelliMemory. "Desinstalaría" ese producto. Hay una actualización para solucionar el problema, pero incluso con la versión fija, nunca he visto mejorar el rendimiento de un sistema con este producto; esencialmente duplica la funcionalidad que ya está en Windows).
Si no puede encontrarlo de esa manera, el siguiente paso es usar el "Kit de herramientas de rendimiento de Windows". Busque en este foro esa cadena, con respuestas de magicandre1981, para obtener instrucciones. Ignora las respuestas que mencionan xperf: es una versión anterior de la herramienta.
ACTUALIZACIÓN: Según los comentarios, el OP hizo lo anterior y descubrió que, aunque poolmon informó que el tamaño total del grupo no paginado era realmente enorme, todas las piezas asignadas eran aparentemente pequeñas. Mi conjetura (también en los comentarios) es que esto se debe a lo que llamaré agrupación "hinchada": la agrupación se asignó, luego se liberó, pero por alguna razón esa cantidad de RAM asignada a la agrupación no se redujo para reflejar la "liberación" . Seguir el procedimiento descrito en esta respuesta por magicandre puede identificar al culpable.
fuente
poolmon
hoy si tengo tiempo, e intentaré leer tu respuesta más de cerca para asegurarme de que la entiendo. ¿Estás diciendo que probablemente hay una pérdida de memoria? Si es así, eso es totalmente plausible, ya que estamos trabajando en un software que tiene fugas de memoria horribles.poolmon.exe
el servidor en cuestión y edité mi pregunta para incluir una captura de pantalla.poolmon
afirma que tengo un grupo no paginado de 6GB (como señaló en mi captura de pantalla del Administrador de tareas), pero cuando miro solo los procesos "Nonp" y los ordeno por tamaño, todos son pequeños (el mayor es 8MB). ¿Tiene alguna idea de por quépoolmon
no se detecta la mayor parte del uso del grupo no paginado?