Bloque II · Módulo 2 · Unidad 2.3
Memoria, caché e I/O
Cómo interpretar memoria virtual, residencia, caché, swap, presión y espera de I/O mediante tendencias y señales correlacionadas.
Antes de empezar#
«Memoria al 90 %» y «CPU baja» parecen diagnósticos, pero son solo fragmentos. Linux usa memoria libre para caché, una tarea bloqueada puede no consumir CPU y una instantánea no distingue crecimiento saludable de fuga.
Dependencias. Capas y recursos (1.1), diagnóstico temporal (1.3), archivos y caché de datos (2.1), estados de tareas y planificación (2.2).
Alcance. Espacio virtual, páginas, RSS/VSZ, page cache, disponibilidad,
reclamación, swap, presión, OOM, buffers, latencia y saturación de I/O, load,
iowait, free, vmstat, top, pidstat, iostat y /proc.
Fuera de alcance. Algoritmos internos completos de reemplazo, NUMA,
hugepages, tuning de VM, scheduler de bloques y modificación de sysctl.
1. Capacidad, uso y presión#
Tres preguntas evitan muchas reglas falsas:
- Capacidad: ¿cuánto recurso existe o está asignado?
- Uso: ¿qué parte está ocupada y por quién?
- Presión: ¿algún trabajo útil se retrasa porque el recurso no está disponible cuando lo necesita?
Un recurso puede estar muy usado sin presión: page cache aprovechando RAM ociosa. También puede existir presión con una media de uso moderada: una VM con límite pequeño, ráfagas o almacenamiento con cola.
| Señal | Pregunta que responde | No demuestra |
|---|---|---|
| Bytes usados | ¿Qué contabiliza esta interfaz? | Que falte capacidad recuperable. |
| RSS de proceso | ¿Qué páginas están residentes según la muestra? | Propiedad exclusiva ni fuga. |
| PSI | ¿Durante cuánto tiempo tareas se retrasan por presión? | Qué proceso o dispositivo es causa final. |
| Latencia funcional | ¿Se degrada la operación? | Qué recurso la provoca. |
2. Memoria virtual y residente#
Cada proceso ve un espacio de direcciones virtuales. Regiones pueden representar código, heap, stack, bibliotecas, archivos mapeados o reservas todavía no respaldadas por páginas físicas.
- VSZ/VmSize: tamaño del espacio virtual contabilizado;
- RSS/VmRSS: páginas actualmente residentes;
- RssAnon: memoria anónima;
- RssFile: páginas respaldadas por archivos;
- RssShmem: memoria compartida.
Un VSZ enorme no implica la misma RAM física. RSS tampoco equivale a memoria
exclusiva: páginas de archivos y bibliotecas pueden compartirse, y la medida de
RSS puede ser aproximada. /proc/PID/smaps ofrece más detalle con mayor coste.
Los page faults no significan siempre «error». Un minor fault puede resolver una página sin leer almacenamiento; un major fault requiere I/O. Interpreta tasas y latencia, no el mero hecho de que existan.
3. Páginas y page cache#
Linux mueve y contabiliza memoria en páginas. La page cache conserva datos de archivos para evitar I/O repetido. Leer un archivo puede aumentar memoria usada y caché; si otra demanda necesita RAM, muchas páginas limpias pueden reclamarse.
free deriva datos de /proc/meminfo. Conviene mirar:
total: capacidad visible;available: estimación de memoria utilizable para iniciar aplicaciones sin swap severa;cacheybuff/cache: categorías agregadas que dependen de versión;swap: capacidad y ocupación.
Buffers de kernel, slab y metadatos también usan memoria. Si crecen, primero identifica la categoría y el mecanismo antes de vaciar cachés. Forzar un drop de caches altera el sistema, empeora rendimiento y rara vez diagnostica una causa.
4. Swap y reclamación#
Swap permite mover páginas anónimas fuera de RAM. Que exista contenido en swap no demuestra presión actual: páginas frías pueden permanecer allí aunque el host se haya recuperado.
Observa actividad, no solo ocupación:
si/sodevmstat: entrada/salida de swap durante el intervalo;- page faults y reclamación;
MemAvailable;- PSI de memoria;
- latencia y rendimiento del workload.
swap usada + si/so≈0 + PSI≈0 + latencia normal
→ evidencia compatible con páginas frías históricas
swap usada + si/so sostenido + PSI + fallos mayores + latencia
→ evidencia de presión que requiere atribución
Deshabilitar swap o ajustar swappiness es un cambio de política, no una prueba
de solo lectura. Puede aumentar riesgo de OOM y queda fuera del bloque.
5. OOM y límites#
Cuando no puede satisfacer memoria y la reclamación no basta, Linux puede activar un mecanismo OOM que selecciona una tarea para recuperar memoria. Un contenedor o unidad con límite puede sufrir OOM aunque el host tenga RAM disponible.
Investiga:
- alcance: host, cgroup, contenedor o proceso;
- límite configurado y uso actual;
- eventos OOM del kernel o cgroup;
- proceso terminado y código/causa;
- patrón de crecimiento;
- impacto y comportamiento de reinicio.
Límites como ulimit/RLIMIT, cgroups y cuotas controlan recursos diferentes.
/proc/PID/limits permite observar parte del contexto; no enumera toda política
externa.
6. I/O, latencia y saturación#
Una operación de I/O atraviesa aplicación, filesystem, caché, scheduler, dispositivo o red. Medir «disco» requiere separar:
- throughput: bytes u operaciones por segundo;
- latencia: tiempo por operación;
- cola: trabajo pendiente;
- utilización: ocupación de un recurso según la herramienta;
- errores: fallos o reintentos;
- presión: tareas retrasadas por I/O.
Un dispositivo puede tener poco throughput pero latencia alta por operaciones pequeñas, errores o cola. Otro puede mostrar alta utilización y cumplir perfectamente sus objetivos.
iostat agrega por dispositivo e intervalo. pidstat -d atribuye I/O observado
a procesos. vmstat muestra tareas bloqueadas y actividad agregada. PSI indica
tiempo de espera por I/O. Necesitas alinear ventanas.
Archivos, caché, flush, filesystem y almacenamiento virtualizado pueden separar
el momento en que la aplicación escribe del momento en que el dispositivo
persiste. sync o conv=fsync cambian el contrato y la carga: documenta qué se
mide.
7. Load e iowait#
En Linux, load average incluye tareas ejecutables y tareas en determinadas esperas no interrumpibles. No es porcentaje de CPU. Interpreta el número con:
- CPU disponibles y afinidad;
- run queue (
r); - tareas bloqueadas (
b); - estados;
- duración y tendencia.
Load 8 puede indicar contención en 2 CPU o trabajo normal en 32; también puede subir por tareas bloqueadas con CPU ociosa.
iowait es contabilidad de tiempo de CPU ociosa mientras hay I/O pendiente,
con ambigüedades especialmente en sistemas multinúcleo. La propia documentación
del kernel advierte que no es una medida fiable aislada y puede incluso
disminuir bajo ciertas condiciones.
8. Método de observación#
Una investigación de recursos conserva contexto:
- define operación, impacto y ventana;
- captura capacidad y límites;
- toma baseline comparable;
- observa tendencia, no solo instantánea;
- separa proceso, host y dispositivo;
- correlaciona al menos dos señales independientes;
- formula una prueba que cambie la confianza;
- modifica una variable solo con condición de parada y rollback.
| Interfaz | Sirve para | Límite principal |
|---|---|---|
free//proc/meminfo | Capacidad y categorías del host. | No atribuye a proceso. |
ps/top//proc/PID | Residencia, CPU y estado por proceso. | Instantáneas y contabilidad compartida. |
vmstat | Run queue, bloqueos, memoria, swap y CPU por intervalo. | Agregado del sistema. |
pidstat | Tasas por proceso. | Requiere ventana y proceso estable. |
iostat | Dispositivos y colas. | No conecta solo con la operación. |
| PSI | Tiempo perdido por presión. | No localiza por sí solo el causante. |
9. Tres patrones comparados#
Caché saludable. available estable, caché alta, sin swap activa ni PSI,
latencia normal. La ocupación es compatible con reutilización eficiente.
Fuga probable. RSS anónima crece con el mismo ciclo de trabajo, no vuelve al baseline, sube presión y termina acercándose al límite. Todavía hay que atribuir el crecimiento y reproducir el patrón.
Cuello de I/O probable. Latencia de usuario sube en la misma ventana que tareas bloqueadas, PSI I/O, cola y await; CPU no está saturada. Atribuir proceso y dispositivo sigue siendo necesario.
10. Errores conceptuales frecuentes#
11. Síntesis y dominio#
La ocupación describe contabilidad; la presión describe retraso. Memoria virtual no equivale a RAM, RSS no siempre es exclusiva, caché puede ser útil, swap puede ser histórica y CPU baja puede coexistir con I/O saturado.
Has alcanzado el dominio cuando puedes:
- distinguir VSZ, RSS, memoria anónima, archivos mapeados y caché;
- reconocer presión actual frente a ocupación histórica;
- interpretar swap, load e iowait sin reglas binarias;
- alinear proceso, host, dispositivo y operación en el tiempo;
- diferenciar caché saludable, fuga probable y cuello de I/O con límites explícitos.
Prácticas relacionadas#
SYS-Q-203: clasificar muestras de recursos.SYS-L-203: comparar señales bajo carga acotada.SYS-I-203: diagnosticar un host lento con CPU baja.
12. Fuentes#
- Linux kernel — Memory Management
Memoria virtual, demand paging, mapeos y subsistema de memoria.
- Linux kernel — /proc filesystem
Contadores de memoria, procesos, load e interpretación cauta de iowait.
- Linux kernel — PSI
Presión de CPU, memoria e I/O como tiempo de tareas retrasadas.
- procps-ng — free(1)
Campos de memoria usados por la herramienta free.