Pular para o conteúdo principal

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