Linux / Comando / free: interpretar la memoria RAM y el swap

free es un comando que muestra un resumen del uso de la memoria física (RAM) y del intercambio (swap) en los sistemas Linux. Para determinar si hay escasez de memoria, es mejor revisar primero la columna available, que estima la cantidad disponible para iniciar nuevos programas sin usar swap, en lugar de la columna free con el nombre literal.

free -h

Linux utiliza la RAM no utilizada para caché de archivos u otros fines y la recupera cuando es necesario. Por lo tanto, no se debe concluir únicamente que hay escasez de memoria simplemente porque el valor de free sea pequeño y el de buff/cache grande.

Información que muestra el comando free

free calcula la información de la memoria física y de intercambio leyendo /proc/meminfo proporcionada por el kernel. La definición de cada columna y las opciones se pueden consultar en el manual oficial de procps-ng free.

free -h

La salida típica se parece a la siguiente. Los valores son ejemplos y el formato de presentación puede variar según el sistema y la versión de procps-ng.

               total        used        free      shared  buff/cache   available
Mem:            15Gi       4.2Gi       1.1Gi       320Mi       9.7Gi        10Gi
Swap:          2.0Gi       128Mi       1.9Gi

Significado de cada columna

total, used, free

columna Significado Interpretación
total Memoria física total disponible Puede no ser exactamente igual a toda la RAM instalada. Se excluyen áreas reservadas por el kernel y el hardware.
used Memoria en uso o no disponible de inmediato Actualmente, en procps-ng se calcula como total - available de la memoria física. Dependiendo de la versión, el método de cálculo puede haber sido diferente.
free Memoria no utilizada para ningún propósito No incluye memoria que se esté utilizando como caché pero que pueda ser recuperada.

shared y buff/cache

shared representa principalmente la memoria utilizada en tmpfs. buff/cache es el valor combinado de los búferes del núcleo, la caché de páginas y la memoria slab recuperable.

La caché mantiene en RAM los datos leídos del disco para un acceso rápido nuevamente. Si una aplicación necesita memoria, el núcleo puede recuperarla, por lo que tener una caché grande no significa necesariamente un problema.

Importancia de available

available es un valor estimado de la memoria que se puede usar para iniciar nuevas aplicaciones sin usar swap. No es simplemente la suma de free + buff/cache, sino que utiliza la información MemAvailable del núcleo, considerando parte de la caché de páginas y la memoria slab que realmente se puede recuperar.

Este valor tampoco es un valor absoluto que garantice el uso futuro de la memoria. Si una aplicación solicita de repente grandes cantidades de memoria o aumenta la memoria difícil de recuperar por el núcleo, la situación puede cambiar rápidamente.

Diferencia entre las filas Mem y Swap

Fila de memoria física

La fila Mem resume el tamaño total y el estado del uso de la RAM real. Incluye no solo la memoria de aplicaciones, sino también el núcleo, caché, memoria compartida, entre otros usos.

Línea de intercambio

Swap muestra la capacidad total, utilizada y disponible del área de intercambio, no de la RAM. El hecho de que el uso de intercambio no sea cero no significa necesariamente que actualmente haya escasez de memoria. Esto se debe a que páginas inactivas desplazadas en el pasado pueden permanecer en el intercambio incluso después de que haya suficiente RAM disponible.

El intercambio (swap) es un área de almacenamiento que el núcleo puede utilizar para páginas de memoria. Un uso persistente de swap, junto con actividad de entrada/salida y mayor latencia, puede indicar presión de memoria. En vmstat, si indica entrada desde swap y so salida hacia swap; descarte la primera fila, que suele resumir el tiempo desde el arranque. Detenga vmstat 1 con Ctrl+C para continuar con el siguiente comando.

vmstat 1

Opciones de uso frecuente

Mostrar en unidades legibles por humanos

free -h

-h o --human selecciona automáticamente unidades binarias como Ki, Mi, Gi según el valor. Si se necesita una unidad fija, se pueden utilizar -m, -g, etc.

free -m
free -g

Ver búferes y caché por separado

free --wide

-w o --wide separa buff/cache en las columnas buffers y cache. Para analizar causas detalladas, también se deben revisar /proc/meminfo, slabtop, etc.

Mostrar repetidamente a intervalos regulares

free -h -s 2

-s 2 muestra continuamente los resultados a intervalos de 2 segundos. Para mostrarlo solo un número determinado de veces, se utiliza junto con -c.

free -h -s 2 -c 5

Ver la suma de la memoria física y swap

free -h --total

-t o --total añaden la suma de las columnas. Como la RAM y el swap tienen diferentes rendimientos y funciones, no se deben interpretar como memoria rápida utilizable viendo solo la suma.

Cómo determinar la falta de memoria

Ver available y las operaciones de entrada/salida de swap juntos

Es recomendable observar las siguientes señales junto con una sola salida de free.

  • Si available se mantiene más bajo de lo habitual
  • Si el uso de swap está aumentando
  • Si vmstat, si·so ocurren de manera continua
  • Si el tiempo de respuesta del servicio y la E/S del disco empeoran juntos
  • Si hay registros de terminación OOM (Out of Memory) en los logs del kernel
free -h
vmstat 1
journalctl -k -g 'oom|Out of memory|Killed process'

Ejecute los comandos uno por uno; vmstat 1 continúa hasta pulsar Ctrl+C. La búsqueda de journalctl -k se limita al arranque actual y puede requerir permisos de lectura. El patrón usa | para alternar entre mensajes; que no aparezcan resultados no demuestra que nunca haya habido un problema de memoria.

Encontrar procesos que consumen mucha memoria

En ps se puede ordenar por uso de memoria y verificar los procesos principales.

ps -eo pid,user,%mem,rss,comm --sort=-rss | head

RSS (Resident Set Size, tamaño residente) expresa la memoria física atribuida a un proceso; en esta salida se muestra en KiB. Las páginas compartidas pueden contarse en varios procesos. Para un análisis más preciso, considere también métricas de cgroup, que agrupan y limitan recursos, y herramientas como smem si están disponibles.

No vacíe la caché a toda costa

La caché de páginas es administrada por el núcleo para mejorar el rendimiento del sistema. Forzar la limpieza de la caché con el propósito de aumentar artificialmente la cifra de free puede aumentar las lecturas de disco y, en cambio, reducir el rendimiento. Realícelo únicamente cuando haya un propósito claro, como en una prueba de rendimiento reproducible, comprendiendo los impactos y los métodos de recuperación.

Puntos a tener en cuenta en unidades y automatización

Unidades binarias y decimales

La visualización básica de -h es la serie KiB, MiB, GiB basada en 1024. Si se utiliza --si, se emplea la serie kB, MB, GB basada en 1000.

free -h --si

Si se mezclan diferentes unidades en documentos o monitoreo, aparecerán diferencias, por lo que debe especificarse la referencia.

No analizar las cadenas de visualización tal cual

Las columnas y métodos de cálculo de free pueden variar según la versión de procps-ng, y las unidades legibles para humanos no son adecuadas para el análisis. En la automatización, siempre que sea posible, use los elementos necesarios de /proc/meminfo o los indicadores estructurados proporcionados por el agente de monitoreo, y fije la unidad y la versión.

Razón por la que el valor de free se ve grande en un contenedor

free lee /proc/meminfo. Dependiendo del tiempo de ejecución del contenedor y de la configuración del cgroup, este archivo puede mostrar un valor cercano a toda la memoria del host, y puede diferir del límite de memoria realmente aplicado al contenedor.

Al juzgar la capacidad disponible del contenedor, verifique juntos la solicitud y el límite del orquestador, el límite de memoria del cgroup, el uso actual y los eventos OOM. Es importante no asumir la memoria que el contenedor puede usar solo en función del valor free del host.

Preguntas frecuentes

¿Si free es casi 0, significa que la memoria es insuficiente?

No necesariamente. Cuando Linux usa la memoria libre como caché, free puede reducirse. Verifique available, entrada/salida de swap y el rendimiento del servicio juntos.

¿El buff/cache es memoria que se puede liberar completamente?

Parte de ella se puede recuperar cuando sea necesario, pero no se puede recuperar toda de inmediato. available es una estimación que tiene en cuenta esta diferencia, por lo que es mejor no sumar simplemente todo buff/cache como memoria libre.

¿Si se usa swap, significa automáticamente que la RAM es insuficiente?

No. Las páginas inactivas del pasado pueden permanecer en el intercambio. Debe verificar si la tendencia de aumento del uso del intercambio, así como la entrada y salida real del intercambio y la latencia, ocurren juntas.

¿Por qué el valor de used se ve diferente de otras herramientas?

Cada herramienta y versión puede clasificar la memoria caché y recuperable de manera diferente. Compare el /proc/meminfo, la versión de procps-ng y la definición de cada herramienta en el mismo momento.

Si la carga también es alta, consulte cómo interpretar la carga promedio del comando uptime para verificar posibles cuellos de botella en la CPU y la E/S.