Lab 2.2 - Análisis de la Gestión de Memoria
Objetivos
Al final de este laboratorio, usted será capaz de:
- Analizar el uso de la memoria
- Comprender el swap
- Monitorizar la memoria por proceso
- Identificar fugas de memoria
- Optimizar el uso de la memoria
Requisitos previos
- Sistema Linux funcional
- Acceso root o sudo
- Terminal abierto
Ejercicio 1: Información Básica de Memoria
Paso 1: Vista General
# Información completa de memoria
free -h
# Información detallada
cat /proc/meminfo
# Vista simple
free
Pregunta: ¿Cuánta RAM tiene? ¿Cuánta está en uso?
Paso 2: Análisis Detallado
# Ver toda la información
cat /proc/meminfo | head -20
# Memoria total
grep MemTotal /proc/meminfo
# Memoria libre
grep MemFree /proc/meminfo
# Memoria disponible (diferente de libre)
grep MemAvailable /proc/meminfo
Explicación:
- MemTotal: RAM total
- MemFree: RAM completamente libre
- MemAvailable: RAM disponible para nuevos procesos (incluye caché recuperable)
Ejercicio 2: Swap
Paso 1: Información de Swap
# Ver el swap
swapon --show
# Detalles del swap
cat /proc/swaps
# Uso de swap
free -h | grep Swap
Paso 2: Crear un Archivo de Swap (Opcional)
# Crear un archivo de 1GB para swap
sudo fallocate -l 1G /swapfile
# Permisos seguros
sudo chmod 600 /swapfile
# Formatear como swap
sudo mkswap /swapfile
# Activar
sudo swapon /swapfile
# Verificar
swapon --show
Paso 3: Swap Permanente
# Agregar a /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Verificar
cat /etc/fstab | grep swap
Ejercicio 3: Memoria por Proceso
Paso 1: Principales Consumidores
# Top 10 procesos por memoria
ps aux --sort=-%mem | head -11
# Con detalles
ps aux --sort=-%mem -o pid,user,%mem,%cpu,cmd | head -11
Paso 2: Memoria de un Proceso Específico
# Encontrar un proceso (ej: firefox)
ps aux | grep firefox
# Ver la memoria de un PID
cat /proc/<PID>/status | grep -E 'VmSize|VmRSS|VmData'
# O con pmap
pmap <PID>
Explicación:
- VmSize: Tamaño virtual total
- VmRSS: RAM física utilizada
- VmData: Memoria de datos
Paso 3: Script de Análisis
# Crear un script
cat > mem-analysis.sh << 'EOF'
#!/bin/bash
echo "=== Top 5 Procesos por Memoria ==="
ps aux --sort=-%mem | head -6
echo
echo "=== Uso de Memoria ==="
free -h
echo
echo "=== Swap ==="
swapon --show
EOF
chmod +x mem-analysis.sh
./mem-analysis.sh
Ejercicio 4: Monitorización en Tiempo Real
Paso 1: vmstat
# Estadísticas cada segundo
vmstat 1
# 10 muestras
vmstat 1 10
# Interpretar las columnas:
# - swpd: Swap utilizado
# - free: Memoria libre
# - buff: Buffer cache
# - cache: Page cache
# - si/so: Swap in/out
Paso 2: sar (si está instalado)
# Instalar sysstat
sudo apt install sysstat
# Estadísticas de memoria
sar -r 1 10
# Histórico
sar -r
Paso 3: Script de Monitorización
# Monitorización continua
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -6'
Ejercicio 5: Detección de Fugas de Memoria
Paso 1: Supervisión Continua
# Crear un script de supervisión
cat > mem-watch.sh << 'EOF'
#!/bin/bash
while true; do
clear
echo "=== $(date) ==="
free -h
echo
echo "=== Top 5 Memoria ==="
ps aux --sort=-%mem | head -6
sleep 2
done
EOF
chmod +x mem-watch.sh
# Ejecutar: ./mem-watch.sh
Paso 2: Análisis de un Proceso
# Seguir la evolución de la memoria de un proceso
watch -n 1 'ps -p <PID> -o pid,%mem,%cpu,rss,vsz,cmd'
Paso 3: Alertas
# Script de alerta si la memoria > 80%
cat > mem-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD=80
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD" ]; then
echo "ALERTA: Memoria al ${MEM_USED}%"
ps aux --sort=-%mem | head -6
fi
EOF
chmod +x mem-alert.sh
./mem-alert.sh
Ejercicio 6: Optimización de Memoria
Paso 1: Limpiar la Caché (¡Precaución!)
# Ver la caché
free -h
# Vaciar la caché (solo si es realmente necesario)
# ATENCIÓN: Puede ralentizar el sistema temporalmente
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
# Verificar
free -h
Paso 2: Ajustar Swappiness
# Ver swappiness actual
cat /proc/sys/vm/swappiness
# Cambiar temporalmente (0-100, más bajo = menos swap)
sudo sysctl vm.swappiness=10
# Permanente: /etc/sysctl.conf
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
Paso 3: Límites de Memoria
# Ver los límites de un proceso
cat /proc/<PID>/limits | grep memory
# Limitar con systemd
systemd-run --slice=my-slice --property=MemoryLimit=512M comando
Verificación
Lista de verificación
Verifique que usted puede:
- Ver el uso total y disponible de memoria
- Analizar el swap
- Identificar los procesos que consumen más memoria
- Monitorizar la memoria en tiempo real
- Detectar problemas de memoria
- Ajustar los parámetros de memoria
Preguntas de Reflexión
-
¿Cuál es la diferencia entre MemFree y MemAvailable?
- MemFree: Memoria completamente libre
- MemAvailable: Memoria disponible (incluye caché recuperable)
-
¿Cuándo se utiliza el swap?
- Cuando la RAM física está saturada
- El kernel mueve las páginas inactivas al swap
-
¿Por qué vaciar la caché puede ser peligroso?
- La caché mejora el rendimiento
- Vaciarla puede ralentizar temporalmente el sistema
Próximos Pasos
- Lab 2.3: Monitorización Avanzada del Sistema
- Capítulo 2.4: Sistema de Archivos Virtual (VFS)
- Capítulo 2.5: Gestión de Procesos
Lab creado el: Diciembre 2024