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