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 elfree
el número debe ser más pequeño que eltop
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 elfree
el número debe ser mayor que eltop
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.