Saltar al contenido principal

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​

  1. ¿Cuál es la diferencia entre MemFree y MemAvailable?

    • MemFree: Memoria completamente libre
    • MemAvailable: Memoria disponible (incluye caché recuperable)
  2. ¿Cuándo se utiliza el swap?

    • Cuando la RAM física está saturada
    • El kernel mueve las páginas inactivas al swap
  3. ¿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