No confíe en la información de la memoria en el Administrador de tareas

Con los años de uso de Windows, estoy acostumbrado al Administrador de tareas. A partir de ahí, maté cientos de aplicaciones por mal comportamiento. Allí observó cuál de ellos devora recursos. Hasta que comencé a trabajar con máquinas que tienen cientos de gigabytes de memoria, y las aplicaciones tienen las solicitudes correspondientes. Este artículo analiza por qué el Administrador de tareas no rastrea bien la memoria y qué usar a cambio. En primer lugar, sobre el mecanismo de asignación de memoria en Windows.

tl; dr: el administrador de tareas oculta información sobre la memoria paginada y el espacio virtual del proceso. Utilice mejor el Explorador de procesos de la suite Sysinternals.

Asignación de Windows


Al iniciar un nuevo proceso, el sistema operativo asigna un espacio de dirección continuo a este proceso. En sistemas de 32 bits, este espacio puede ser de 4 GB, generalmente 2 GB para el núcleo, y el resto para el proceso. Este artículo ignorará el uso de memoria central. En los sistemas de 64 bits, la memoria reservada para el proceso puede crecer hasta 64 TB. ¿Qué hará este proceso con unos pocos terabytes de memoria cuando realmente tengamos 8 GB miserables? Primero debe comprender qué es la memoria reservada y transferida.

Memoria reservada y transferida


No todas las partes de este enorme espacio de direcciones son iguales. Algunas partes del espacio de direcciones del proceso en realidad son compatibles con RAM física o con un disco (ver más abajo). La memoria reservada se considera comprometida si el sistema operativo le ofrece esta memoria cuando intenta usarla. El resto del espacio de direcciones, y esta es la gran mayoría, queda disponible para reserva. Es decir, el sistema operativo puede no ofrecerle siempre este bloque de memoria para su uso: puede hacer una copia en el disco (archivo de intercambio), por ejemplo, o puede que no. En C ++, la memoria se reserva llamando a VirtualAlloc . Por lo tanto, la memoria transferida es un recurso limitado de hardware en el sistema operativo. A ver

Archivo de intercambio del sistema operativo


El archivo de intercambio es una gran idea. Básicamente, el sistema operativo entiende que algunas partes de la memoria no son particularmente utilizadas por su aplicación. ¿Por qué gastar memoria física real en él? En cambio, el proceso del núcleo escribe este fragmento no utilizado en el disco. Hasta que vuelvan a mirarlo, solo entonces volverá a la memoria.

Para una explicación más detallada de cómo funciona la memoria en Windows, recomiendo la conferencia "Secretos de administración de memoria" de Mark Russinovich.

Seguimiento de la memoria


Hay mucho que ver y analizar. ¿A quién contactar? Por supuesto, al Administrador de tareas!

La memoria RAM generalmente se denomina Conjunto de trabajo, mientras que toda la memoria asignada generalmente se llama Bytes privados. Las DLL confunden definiciones, así que ignórelas por ahora. En otras palabras:

Private Bytes [ ] = +

De manera predeterminada, el Administrador de tareas muestra exactamente el conjunto de trabajo para cualquier proceso:



Y este es el número que miré todo el tiempo. ¿Cómo supe que en el Administrador de tareas la información sobre la memoria transferida está en la columna Commit Size . No pude encontrar información sobre la memoria virtual allí.


El administrador de tareas le permite agregar información sobre la memoria transferida, si hace clic derecho en las columnas y selecciona el elemento correspondiente

Métricas efectivas de memoria


Afortunadamente, hay muchos otros recursos para rastrear recursos. PerfMon (System Monitor) está instalado en cada máquina con Windows, que proporciona información muy detallada sobre cada proceso y el sistema en su conjunto:



Curiosamente, el Monitor del sistema puede examinar y comparar métricas en dos o más computadoras en la red. Esta es una herramienta muy poderosa, pero el Administrador de tareas es obviamente más fácil de usar. Recomiendo Process Explorer como una solución intermedia:



Boom! Visual Studio, ¿por qué sigues en modo de 32 bits (presta atención a su tamaño virtual)? El uso máximo de memoria en mi computadora al 89% del máximo todavía es soportable. Esto será útil más tarde.

Adición: muchos apuntaron a otras herramientas convenientes, como VMMap y RAMMap .

Depuración de información de memoria


Afortunadamente, estas no son algunas curiosidades innecesarias del sistema operativo. La información real sobre el consumo de memoria me ha ayudado muchas veces a depurar varios problemas.

Lo más importante es encontrar las partes intactas de la memoria asignada. Los datos de intercambio también son importantes: esta memoria se transfiere, pero rara vez se usa o no se usa en absoluto.

Incluso si a veces se usa la memoria, es importante comprender que este es un recurso costoso, por lo que nunca debe seguir ese camino. Las pérdidas de memoria aparecerán aquí.

Por estas razones, anteriormente escuché una sugerencia para eliminar completamente el archivo de página y equiparar la memoria asignada al conjunto de trabajo. Sin embargo, esta es una idea de doble filo. Entonces el sistema operativo no puede volcar memoria en caso de operación incorrecta de aplicaciones que a veces reservan memoria en vano.

Source: https://habr.com/ru/post/es435678/


All Articles