Saltar al contenido principal

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