Otimizando o desempenho do Linux ajustando parâmetros do kernel
1. Introdução aos Parâmetros do Kernel e ao sysctl
Parâmetros do kernel são variáveis internas que controlam o comportamento do sistema operacional em tempo real. Ajustá-los permite otimizar desempenho, segurança e estabilidade sem recompilar o kernel. A ferramenta principal para essa tarefa é o sysctl, que possibilita leitura e escrita dinâmica desses parâmetros.
Para visualizar um parâmetro, use:
sysctl vm.swappiness
Para alterá-lo temporariamente:
sysctl -w vm.swappiness=10
Mudanças permanentes devem ser adicionadas em /etc/sysctl.conf ou em arquivos separados em /etc/sysctl.d/. Exemplo de entrada:
vm.swappiness=10
Após editar, aplique com:
sysctl -p
2. Ajustes de Memória e Gerenciamento de Cache
O parâmetro vm.swappiness controla a tendência do kernel de usar swap. Valores baixos (0-10) priorizam manter processos na RAM, ideais para servidores com muita memória. Valores altos (60-100) favorecem swap, úteis em sistemas com pouca RAM.
# Reduzir uso de swap em servidor com 64GB RAM
vm.swappiness=10
vm.dirty_ratio e vm.dirty_background_ratio definem quando processos que escrevem em disco são bloqueados e quando o kernel inicia a escrita assíncrona de páginas sujas. Ajustes típicos para workloads de banco de dados:
# Aumentar cache de escrita para melhor throughput
vm.dirty_ratio=40
vm.dirty_background_ratio=10
vm.vfs_cache_pressure controla a tendência de liberar caches de inodes e dentries. Reduzir para 50 diminui a pressão de liberação, melhorando desempenho em sistemas com muitos arquivos pequenos:
vm.vfs_cache_pressure=50
3. Otimização de Rede e Conexões TCP
Para servidores web com alto volume de conexões, aumente a fila de conexões pendentes:
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
Reduza o tempo de espera em estado TIME_WAIT e reutilize sockets:
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_tw_reuse=1
Aumente os buffers de rede para melhor throughput em transferências grandes:
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
4. Ajustes de CPU e Escalonamento de Processos
O escalonador CFS (Completely Fair Scheduler) pode ser ajustado para reduzir overhead de migração de processos entre CPUs:
# Reduzir custo de migração (padrão 500000 ns)
kernel.sched_migration_cost_ns=5000000
Desative o agrupamento automático de processos para workloads que exigem priorização manual:
kernel.sched_autogroup_enabled=0
Para sistemas NUMA, o balanceamento automático pode causar latência. Desative para workloads sensíveis:
kernel.numa_balancing=0
Evite travamentos por tarefas congeladas (útil em sistemas de alta disponibilidade):
kernel.hung_task_timeout_secs=300
5. Otimização de Sistema de Arquivos e E/S
Aumente o limite global de arquivos abertos para servidores com muitos arquivos simultâneos:
fs.file-max=2097152
fs.nr_open=2097152
Para ferramentas que monitoram diretórios (como inotify), aumente o limite de watches:
fs.inotify.max_user_watches=524288
Controle o reclaim de páginas em zonas de memória. Para workloads que exigem alocação contígua:
vm.zone_reclaim_mode=1
6. Segurança e Isolamento com Parâmetros de Kernel
Restrinja acesso a informações sensíveis do kernel:
kernel.kptr_restrict=2
kernel.dmesg_restrict=1
Proteja contra ataques de spoofing e SYN flood:
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.tcp_syncookies=1
Reforce a randomização de endereços de memória (ASLR):
kernel.randomize_va_space=2
7. Aplicação, Teste e Boas Práticas
Após configurar /etc/sysctl.conf, aplique as mudanças:
sysctl -p
Verifique todos os parâmetros ativos:
sysctl -a | grep -E "vm\.|net\.|kernel\.|fs\."
Monitore o impacto antes e depois dos ajustes:
# Uso de swap
vmstat 1 5
# Estatísticas de rede
sar -n DEV 1 5
# Perfil de desempenho
perf stat -e cycles,instructions,cache-misses sleep 10
Verifique logs do kernel para erros:
dmesg | tail -20
Checklist de validação:
- [ ] Sistema estável após reboot
- [ ] Carga de trabalho testada com benchmarks reais
- [ ] Consumo de swap dentro do esperado
- [ ] Latência de rede aceitável
- [ ] Sem erros em /var/log/syslog ou dmesg
Referências
- Documentação oficial do kernel sobre sysctl — Guia completo de todos os parâmetros do kernel disponíveis via sysctl.
- Red Hat Enterprise Linux - Performance Tuning Guide — Guia prático de ajustes de desempenho para sistemas Linux empresariais.
- Linux Kernel Networking - TCP Tuning — Parâmetros de rede TCP/IP detalhados com explicações técnicas.
- Ubuntu Server - Kernel Tuning — Tutorial oficial da Canonical sobre otimização de rede e kernel no Ubuntu Server.
- Arch Linux Wiki - sysctl — Referência comunitária abrangente sobre configuração de parâmetros do kernel via sysctl.
- IBM Developer - Linux performance tuning — Artigo técnico com exemplos práticos de ajustes de memória, CPU e E/S.