GNU/Linux >> Tutoriales Linux >  >> Linux

Determinar correctamente el uso de memoria en Linux

Copié/pegué descaradamente mi respuesta de serverfault el otro día :-)

El sistema de memoria virtual de Linux no es tan simple. No puede simplemente sumar todos los campos RSS y obtener el valor informado used por free . Hay muchas razones para esto, pero mencionaré algunas de las más importantes.

  • Cuando un proceso se bifurca, tanto el padre como el hijo se mostrarán con el mismo RSS. Sin embargo, Linux emplea copia en escritura para que ambos procesos realmente usen la misma memoria. Solo cuando uno de los procesos modifica la memoria, esta se duplicará.
    Esto hará que el free el número debe ser más pequeño que el top Suma RSS.

  • El valor RSS no incluye la memoria compartida. Dado que la memoria compartida no es propiedad de ningún proceso, top no lo incluye en RSS.
    Esto hará que el free el número debe ser mayor que el top Suma RSS.


Si está buscando números de memoria que sumen, eche un vistazo a smem:

smem es una herramienta que puede brindar numerosos informes sobre el uso de la memoria en los sistemas Linux. A diferencia de las herramientas existentes, smem puede informar el tamaño de conjunto proporcional (PSS), que es una representación más significativa de la cantidad de memoria utilizada por las bibliotecas y las aplicaciones en un sistema de memoria virtual.

Debido a que grandes porciones de la memoria física suelen compartirse entre varias aplicaciones, la medida estándar del uso de la memoria conocida como tamaño del conjunto residente (RSS) sobreestimará significativamente el uso de la memoria. PSS, en cambio, mide la "parte justa" de cada aplicación de cada área compartida para dar una medida realista.

Por ejemplo aquí:

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

Así que PSS es la columna interesante aquí porque tiene en cuenta la memoria compartida.
A diferencia de RSS es significativo para sumar. Obtenemos un total de 654 Mb para procesos de espacio de usuario aquí.

La salida de todo el sistema informa sobre el resto:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

Entonces 1Gb RAM total =654Mb procesos de zona de usuario + 346Mb memoria del kernel + 16Mb gratis
(más o menos unos Mb)

En general, aproximadamente la mitad de la memoria se usa para caché (494 Mb).

Pregunta extra :¿Qué es la memoria caché del área de usuario frente a la memoria caché del kernel aquí?

por cierto, para algo visual prueba:

# smem  --pie=name


Una muy buena herramienta es pmap que enumeran el uso actual de la memoria para un determinado proceso:

pmap -d PID

Para obtener más información al respecto, consulte la página man man pmap y también eche un vistazo a las 20 herramientas de monitoreo del sistema Linux que todo administrador de sistemas debe conocer, que enumeran excelentes herramientas que siempre uso para obtener información sobre mi caja de Linux.


Linux
  1. Linux:¿limitar el uso de memoria para un solo proceso de Linux?

  2. Linux:¿determinar correctamente el uso de memoria en Linux?

  3. Cómo verificar el uso de memoria en un servidor basado en Linux

  4. Determinar el uso del disco en Linux usando el comando "du"

  5. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

Cómo verificar el uso de memoria en Linux

Comando libre de Linux (Comprobar el uso de la memoria)

Comando df de Linux

Uso máximo de memoria de un proceso Linux/Unix

limitando el uso de memoria en R bajo Linux

¿Cómo se informa el uso de la memoria en Linux?