Capítulo 12.2 - Ajuste de Rendimiento
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Identificar los cuellos de botella
- Optimizar el rendimiento de la CPU
- Optimizar la memoria
- Optimizar las I/O de disco
- Configurar los parámetros del kernel
- Monitorizar el rendimiento
Identificación de Problemas
Herramientas de Diagnóstico
# CPU
top, htop, mpstat
cat /proc/stat
# Memoria
free -h
vmstat
cat /proc/meminfo
# Disco
iostat -x
iotop
df -h
# Red
iftop, nethogs
ss -i
Métricas Clave
# Load average
uptime
# Interpretación: < número CPUs
# CPU idle
mpstat 1
# Objetivo: > 20% idle
# Memoria disponible
free -h
# Objetivo: > 10% libre
# I/O wait
iostat -x 1
# Objetivo: < 5%
Optimización de CPU
Prioridades de Procesos
# Ajustar nice values
nice -n 10 comando # Prioridad baja
nice -n -10 comando # Prioridad alta (root)
# Renice proceso existente
renice 10 PID
renice 10 -u user1
Afinidad de CPU
# Asignar proceso a CPU específica
taskset -c 0,1 comando
# Proceso existente
taskset -cp 0,1 PID
Límites de CPU
# cgroups v2
systemd-run --slice=my-slice --property=CPUQuota=50% comando
# cpuset
cset set -c 0-3 -s my-set
cset proc -m -p PID -s my-set
Optimización de Memoria
Swap
# Ver swap
free -h
swapon --show
# Ajustar swappiness
# /etc/sysctl.conf
vm.swappiness=10 # 0-100, más bajo = menos swap
# Aplicar
sudo sysctl -p
Caché y Buffer
# Vaciar caché (si es necesario)
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Verificar uso
free -h
Límites de Memoria
# ulimit
ulimit -v 1000000 # 1GB en KB
# cgroups
systemd-run --slice=my-slice --property=MemoryLimit=1G comando
Optimización de I/O
Sistemas de Archivos
# Elegir FS apropiado
# - ext4: General
# - xfs: Archivos grandes
# - btrfs: Snapshots
# Opciones de montaje
# /etc/fstab
/dev/sda1 /data xfs defaults,noatime 0 2
# noatime: Sin actualización atime (rendimiento)
I/O Scheduler
# Ver scheduler actual
cat /sys/block/sda/queue/scheduler
# Cambiar scheduler
echo deadline > /sys/block/sda/queue/scheduler
# Permanente: kernel parameter
# elevator=deadline
RAID y LVM
# RAID para rendimiento
# - RAID 0: Rendimiento (sin redundancia)
# - RAID 10: Rendimiento + redundancia
# LVM para flexibilidad
# - Extensión de volúmenes
# - Snapshots
Parámetros del Kernel
sysctl
# Ver parámetros
sysctl -a
# Modificar temporalmente
sudo sysctl vm.swappiness=10
# Permanente: /etc/sysctl.conf
vm.swappiness=10
net.core.rmem_max=16777216
net.core.wmem_max=16777216
# Aplicar
sudo sysctl -p
Parámetros de Red
# /etc/sysctl.conf
# Optimización TCP
net.core.somaxconn=1024
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
Parámetros de Memoria
# /etc/sysctl.conf
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=5
Optimización de Servicios
Servicios Innecesarios
# Ver servicios activos
systemctl list-units --type=service --state=running
# Desactivar servicios innecesarios
sudo systemctl disable service-name
sudo systemctl stop service-name
Límites de Recursos
# Unit file systemd
[Service]
MemoryLimit=512M
CPUQuota=50%
IOWeight=100
Monitorización del Rendimiento
Scripts de Monitorización
#!/bin/bash
# Monitorización de rendimiento
echo "=== CPU ==="
top -bn1 | grep "Cpu(s)"
mpstat 1 1
echo "=== Memoria ==="
free -h
vmstat -s
echo "=== Disco ==="
iostat -x 1 1
df -h
echo "=== Red ==="
ss -i
Alertas de Rendimiento
#!/bin/bash
# Alertas de rendimiento
# CPU
CPU_IDLE=$(mpstat 1 1 | tail -1 | awk '{print $NF}')
if (( $(echo "$CPU_IDLE < 20" | bc -l) )); then
echo "ALERTA: CPU idle a ${CPU_IDLE}%"
fi
# Memoria
MEM_FREE=$(free | grep Mem | awk '{printf "%.0f", $4/$2 * 100}')
if [ "$MEM_FREE" -lt 10 ]; then
echo "ALERTA: Memoria libre a ${MEM_FREE}%"
fi
Resumen
En este capítulo, usted ha aprendido:
Diagnóstico: Herramientas para identificar cuellos de botella
CPU: Prioridades, afinidad, límites
Memoria: Swap, caché, límites
I/O: FS, scheduler, RAID
Kernel: sysctl, parámetros de red/memoria
Servicios: Desactivar innecesarios, límites
Monitorización: Scripts, alertas de rendimiento
Próximos Pasos
Capítulo 12.3: Automatización Completa
Fin del Curso: Recapitulación
Capítulo creado el: Diciembre 2024