Memory Management en Linux: page cache, slab, swapping y más
La memoria es uno de los recursos más críticos de cualquier sistema operativo, y Linux tiene uno de los modelos de administración más sofisticados y eficientes que existen. Aunque a veces puede parecer un “caja negra”, comprender cómo Linux maneja la RAM, qué son el page cache, los slab allocators, la swap y otros mecanismos internos te permite diagnosticar problemas, optimizar el rendimiento e interpretar con precisión herramientas como top, free y vmstat.
En esta guía definitiva sobre Memory Management en Linux, vamos a recorrer desde los conceptos fundamentales hasta los detalles más avanzados del subsistema de memoria. Ideal para quienes quieren entender qué está pasando realmente “bajo el capó”.
¿Cómo administra la memoria Linux realmente?
Linux combina varios mecanismos para gestionar la memoria física y virtual. Entre los más importantes:
- Page cache: acelera el acceso a archivos.
- Slab allocator: administra objetos del kernel.
- Swapping: mueve páginas a disco cuando falta RAM.
- OOM Killer: decide qué proceso matar cuando no queda memoria.
- NUMA awareness: optimiza acceso en sistemas multiprocesador.
A continuación veremos cada uno en detalle, cómo funcionan y cómo analizarlos desde la terminal.
Page Cache: el corazón del rendimiento en Linux
Linux intenta que la RAM nunca esté realmente “vacía”. Todo espacio libre es automáticamente utilizado como page cache, un mecanismo que almacena datos de archivos y bloques del disco en memoria para acelerar accesos futuros.
Es por eso que al ejecutar free -h muchas veces parece que “no hay memoria libre”, cuando en realidad esa RAM está disponible, pero se está usando para cache.
$ free -h
total used free shared buff/cache available
Mem: 16Gi 2.3Gi 300Mi 120Mi 13Gi 13GiEl valor importante es available, que indica cuánta memoria puede usarse sin necesidad de swapping.
¿Qué almacena el page cache?
- Datos leídos desde archivos.
- Metadatos del sistema de archivos.
- Bloques de discos usados recientemente.
¿Se puede limpiar el page cache?
Sí, aunque no se recomienda salvo en pruebas:
# sync; echo 1 > /proc/sys/vm/drop_cachesLimpia únicamente el page cache, manteniendo buffers o slabs.
Slab Allocator: el almacén de objetos del kernel
Linux usa el slab allocator para administrar estructuras internas del kernel: inodos, dentry, tareas, sockets, etc.
Existen tres implementaciones modernas:
- SLAB (el clásico)
- SLUB (el más usado en distribuciones actuales)
- SLOB (para sistemas embebidos muy pequeños)
Cada tipo de objeto del kernel tiene su propio “slab” donde se reciclan estructuras en lugar de crearlas y destruirlas constantemente. Esto reduce la fragmentación y mejora el rendimiento.
Ver los slabs en tiempo real
$ slabtopSalida típica:
Active / Total Objects (% used) : 350000 / 420000 (83%)
Active / Total Slabs (% used) : 9000 / 10000 (90%)También se pueden consultar directamente:
$ cat /proc/slabinfoSwapping: cuando el sistema se queda sin RAM
La swap actúa como una extensión lenta de la RAM almacenada en disco. Linux empieza a usar swap cuando el sistema cree que es beneficioso liberar memoria para cache o que la RAM disponible se está agotando.
Puedes ver cuánta swap se usa con:
$ free -h¿Cómo decide Linux cuándo usar swap?
Mediante el parámetro vm.swappiness, cuyo valor va de 0 a 100:
- 0-20: evita swap al máximo.
- 60: valor por defecto en muchas distros.
- 80-100: sistema agresivo usando swap.
Ver el valor actual:
$ cat /proc/sys/vm/swappinessModificar temporalmente:
# sysctl vm.swappiness=10ZRAM: comprimido en RAM, rápido y moderno
Muchos sistemas modernos (Ubuntu, Fedora, ChromeOS) usan ZRAM en lugar de particiones swap. Es un bloque de memoria RAM comprimida, que permite almacenar más datos con menos penalización de rendimiento.
Ver el estado de ZRAM:
$ zramctlOOM Killer: el último recurso del sistema
Cuando no queda memoria y la swap está llena, entra en acción el temido OOM Killer (Out Of Memory Killer). Su función es elegir el proceso “menos valioso” para finalizarlo y evitar que el sistema se congele.
Puedes ver qué proceso fue eliminado en:
$ dmesg | grep -i "killed process"¿Cómo decide el OOM Killer qué matar?
Linux asigna una puntuación llamada oom_score:
$ cat /proc/<PID>/oom_scoreCuanto mayor, más probable que sea eliminado.
Se puede proteger un proceso importante (por ejemplo, tu servidor web):
# echo -1000 > /proc/<PID>/oom_score_adjHerramientas clave para analizar la memoria en Linux
free
Te muestra el resumen general de memoria.
vmstat
Ideal para monitorear comportamiento dinámico del sistema.
$ vmstat 1top y htop
Permiten ver consumo por proceso, buffers y cache.
Conclusión
El subsistema de memoria de Linux es extremadamente eficiente y está diseñado para aprovechar cada byte disponible. Entender cómo funciona te permite diagnosticar problemas, optimizar servidores, detectar fugas de memoria, interpretar correctamente la salida de herramientas como free y evitar errores comunes como creer que “no hay RAM disponible” cuando en realidad el sistema la está usando inteligentemente.
Page cache, slab, swap, ZRAM y OOM Killer forman un engranaje complejo, pero comprensible. Con esta guía ya tenés una base sólida para interpretar y modificar el comportamiento del kernel según tus necesidades.

