used usage total top physical per check memory linux-kernel free-command

usage - total memory used by process linux



Entendiendo “Buffers” y “Cached” desde el comando libre (5)

Citando a RHEL :

Linux siempre intenta usar la RAM para acelerar las operaciones del disco utilizando la memoria disponible para los buffers (metadatos del sistema de archivos) y la caché (páginas con contenido real de archivos o dispositivos de bloque).

Esto se ha pedido anteriormente, pero no quiero actualizar el mismo hilo de nuevo, ya que era un hilo antiguo.

Quiero aclararme sobre las columnas "buffers" y "cache" de la salida del comando free .

Esto es lo que mi entendimiento ...

El búfer es algo donde los datos están en la memoria pero aún no se han vaciado en el disco. Los datos se vaciarán al disco periódicamente mediante el daemon bdflush o podemos hacerlo manualmente ejecutando el comando sync .

La memoria caché, por otro lado, es un programa / datos que se carga en la memoria, pero se conserva en la memoria, de modo que si se necesita nuevamente, estará disponible rápidamente.

Para entender el concepto de buffers, probé el siguiente experimento ...

Esta es la lectura del comando free en mi escritorio.

[zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 465 2431 0 30 230 -/+ buffers/cache: 204 2692 Swap: 4000 0 4000 [zama@localhost ~]$ sync [zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 466 2431 0 30 230 -/+ buffers/cache: 205 2691 Swap: 4000 0 4000

Aquí no puedo ver que el búfer se reduzca después de ejecutar el comando de sync .

A continuación, intenté lo siguiente ... Intenté escribir un archivo enorme en el disco.

[zama@localhost ~]$ dd if=/dev/zero of=test bs=1024k

Como era de esperar, el valor almacenado en caché debería aumentar y gratis lo confirma.

@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 32 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000

Volví a ejecutar el comando de sync y luego lo comprobé usando free . Puedo ver que el valor del búfer está disminuyendo desde la salida del comando free . No hubo reducción en el caché. Esto significa que las páginas sucias en la RAM después de mi ejecución de dd coomand se han vaciado en el disco.

@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 10 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000

Luego actualicé el parámetro del kernel drop_cache para que se drop_cache el drop_cache caché

[root@localhost ~]# cat /proc/sys/vm/drop_caches 0 [root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches [root@localhost ~]# cat /proc/sys/vm/drop_caches 1

free ahora confirma que tanto el búfer como el valor de caché se eliminan.

[root@localhost ~]# free -m total used free shared buffers cached Mem: 2897 299 2597 0 1 74 -/+ buffers/cache: 224 2672 Swap: 4000 0 4000

Por lo tanto, mi declaración inicial de que "Buffer" son datos de RAM que aún no se han vaciado en el disco parece ser correcta.

Por favor, guíame si estoy en la dirección correcta.


El subsistema vm de Linux trata cualquier memoria libre o no utilizada o no asignada como buffers / cache

Por lo tanto, la ejecución de echo 1 > /proc/sys/vm/drop_caches indica al kernel que descarte o limpie los cachés de página (caché de página), los dentries (slab-cache) y los inodes (en el slab-cache) y causando la memoria para ser reclamado y disponible.

Las páginas de caché de datos limpios no se liberan por diseño. El núcleo puede recuperarlos fácilmente si se asigna memoria adicional (malloc / calloc / brk / sbrk y amigos), mientras que contienen datos útiles de discos que, si es necesario, guardan nuevamente haciendo una E / S de disco.

sync comando de sync solo confirma las páginas sucias en la memoria del disco, no libera los buffers / caché. La única forma de eliminar buffers / cache es mediante echo "1" > /proc/sys/vm/drop_caches o el kernel reclama las páginas de datos para los nuevos asignados solicitados por las aplicaciones

pdflush se ha reemplazado mediante el uso de subprocesos por información de dispositivo de respaldo (BDI).


Este es mi entendimiento: los búferes le indican la cantidad de memoria reservada para el mantenimiento de dispositivos de bloque, pero el caché le indica la cantidad de memoria que se utiliza para el contenido de los archivos .


La forma en que siempre lo entendí es que el área del búfer de la memoria es para el almacenamiento temporal de los datos que se leen o escriben en los dispositivos (incluidos los discos), mientras que el área de la memoria caché de la memoria es para acelerar las lecturas futuras de un dispositivo.


Los encabezados de columna en el comando libre están algo mal etiquetados, al menos desde el punto de vista de un usuario de linux (a diferencia del desarrollador). A continuación hay una aclaración de lo que significan los encabezados:

total: Sí, esto es carnero total.

utilizado: Esta es probablemente la columna más confusa. Esta es una combinación de memoria utilizada por la aplicación y otra memoria ''temporalmente'' (buffer + caché) que está disponible si es necesario. Así que, técnicamente, la memoria realmente se está utilizando, pero gran parte de esta memoria está disponible si una aplicación lo necesita. La memoria utilizada ''temporalmente'' se toma prestada si está disponible por el sistema de Linux para ayudar a acelerar el rendimiento del sistema, de lo contrario, el sistema habría leído del disco con más frecuencia. Gran parte de este tipo de memoria se muestra en la columna "en caché". Esta memoria es abandonada por el sistema Linux si una aplicación necesita memoria.

libre: sí, esta pura memoria libre e intacta.

compartida: memoria asignada específicamente para ser utilizada por múltiples procesos.

buffers: memoria temporal que se reserva para ayudar en algunos procesos

caché: memoria que está disponible y ''prestada'' por el sistema operativo para ayudar a acelerar muchas operaciones del sistema operativo Linux. El sistema abandona esta memoria si una aplicación lo necesita.

La línea que comienza con - / + buffers / cache suele ser más útil que la primera línea Mem . La intersección de los buffers / caché libres y - / + es esencialmente lo que tiene para la memoria "disponible".