Capítulo 12.2 - Performance Tuning
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Identificar gargalos
- Otimizar o desempenho da CPU
- Otimizar a memória
- Otimizar o I/O de disco
- Configurar parâmetros do kernel
- Monitorar o desempenho
Identificação de Problemas
Ferramentas de Diagnóstico
# CPU
top, htop, mpstat
cat /proc/stat
# Memória
free -h
vmstat
cat /proc/meminfo
# Disco
iostat -x
iotop
df -h
# Rede
iftop, nethogs
ss -i
Métricas-Chave
# Load average
uptime
# Interpretação: < número de CPUs
# CPU idle
mpstat 1
# Objetivo: > 20% idle
# Memória disponível
free -h
# Objetivo: > 10% livre
# I/O wait
iostat -x 1
# Objetivo: < 5%
Otimização de CPU
Prioridades de Processo
# Ajustar valores nice
nice -n 10 comando # Prioridade baixa
nice -n -10 comando # Prioridade alta (root)
# Renice processo existente
renice 10 PID
renice 10 -u user1
Afinidade de CPU
# Atribuir processo a CPU específica
taskset -c 0,1 comando
# Processo existente
taskset -cp 0,1 PID
Limites 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
Otimização de Memória
Swap
# Ver swap
free -h
swapon --show
# Ajustar swappiness
# /etc/sysctl.conf
vm.swappiness=10 # 0-100, menor = menos swap
# Aplicar
sudo sysctl -p
Cache e Buffer
# Limpar cache (se necessário)
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Verificar uso
free -h
Limites de Memória
# ulimit
ulimit -v 1000000 # 1GB em KB
# cgroups
systemd-run --slice=my-slice --property=MemoryLimit=1G comando
Otimização de I/O
Sistemas de Arquivos
# Escolher FS apropriado
# - ext4: Geral
# - xfs: Arquivos grandes
# - btrfs: Snapshots
# Opções de montagem
# /etc/fstab
/dev/sda1 /data xfs defaults,noatime 0 2
# noatime: Não atualiza atime (performance)
I/O Scheduler
# Ver scheduler atual
cat /sys/block/sda/queue/scheduler
# Alterar scheduler
echo deadline > /sys/block/sda/queue/scheduler
# Permanente: parâmetro do kernel
# elevator=deadline
RAID e LVM
# RAID para performance
# - RAID 0: Performance (sem redundância)
# - RAID 10: Performance + redundância
# LVM para flexibilidade
# - Expansão de volumes
# - Snapshots
Parâmetros do Kernel
sysctl
# Ver parâmetros
sysctl -a
# Modificar temporariamente
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 Rede
# /etc/sysctl.conf
# Otimização 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 Memória
# /etc/sysctl.conf
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=5
Otimização de Serviços
Serviços Inúteis
# Ver serviços ativos
systemctl list-units --type=service --state=running
# Desativar serviços desnecessários
sudo systemctl disable service-name
sudo systemctl stop service-name
Limites de Recursos
# Unit file systemd
[Service]
MemoryLimit=512M
CPUQuota=50%
IOWeight=100
Monitoramento de Performance
Scripts de Monitoramento
#!/bin/bash
# Monitoramento de performance
echo "=== CPU ==="
top -bn1 | grep "Cpu(s)"
mpstat 1 1
echo "=== Memória ==="
free -h
vmstat -s
echo "=== Disco ==="
iostat -x 1 1
df -h
echo "=== Rede ==="
ss -i
Alertas de Performance
#!/bin/bash
# Alertas de performance
# CPU
CPU_IDLE=$(mpstat 1 1 | tail -1 | awk '{print $NF}')
if (( $(echo "$CPU_IDLE < 20" | bc -l) )); then
echo "ALERTA: CPU idle em ${CPU_IDLE}%"
fi
# Memória
MEM_FREE=$(free | grep Mem | awk '{printf "%.0f", $4/$2 * 100}')
if [ "$MEM_FREE" -lt 10 ]; then
echo "ALERTA: Memória livre em ${MEM_FREE}%"
fi
Resumo
Neste capítulo, você aprendeu:
Diagnóstico: Ferramentas para identificar gargalos
CPU: Prioridades, afinidade, limites
Memória: Swap, cache, limites
I/O: FS, scheduler, RAID
Kernel: sysctl, parâmetros de rede/memória
Serviços: Desativar desnecessários, limites
Monitoramento: Scripts, alertas de performance
Próximos Passos
Capítulo 12.3: Automação Completa
Fim do Curso: Recapitulação
Capítulo criado em: Dezembro 2024