O que é o sysctl?

O sysctl permite ler e alterar parâmetros do kernel em tempo de execução. Esses parâmetros ficam expostos no sistema de arquivos virtual /proc/sys/.

sysctl -a: listar todos os parâmetros

sysctl -a 2>/dev/null | wc -l
1487

São centenas de parâmetros. Para filtrar:

sysctl -a 2>/dev/null | grep swappiness
vm.swappiness = 60

Lendo um parâmetro específico

sysctl vm.swappiness
vm.swappiness = 60

O mesmo valor pode ser lido diretamente do /proc/sys/:

cat /proc/sys/vm/swappiness
60
Dica: A relação entre o nome do sysctl e o caminho em /proc/sys/ é direta: troque pontos por barras. vm.swappiness vira /proc/sys/vm/swappiness.

sysctl -w: alterar em tempo real

Mudanças com -w são imediatas mas temporárias -- perdidas no próximo reboot:

# Reduzir uso de swap (padrão: 60, recomendado para servidores: 10)
sudo sysctl -w vm.swappiness=10
vm.swappiness = 10
# Habilitar IP forwarding (necessário para roteadores/containers)
sudo sysctl -w net.ipv4.ip_forward=1

Alternativamente, escreva direto no /proc/sys/:

echo 10 | sudo tee /proc/sys/vm/swappiness

/etc/sysctl.conf: mudanças persistentes

Para que os parâmetros sobrevivam ao reboot, adicione-os em /etc/sysctl.conf ou crie arquivos em /etc/sysctl.d/:

sudo tee /etc/sysctl.d/99-tuning.conf <<EOF
# Reduzir swappiness para servidores com bastante RAM
vm.swappiness = 10

# Habilitar IP forwarding
net.ipv4.ip_forward = 1

# Desabilitar ICMP redirects (segurança)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# Aumentar limite de conexões
net.core.somaxconn = 4096
EOF

Aplique as mudanças sem reiniciar:

sudo sysctl -p /etc/sysctl.d/99-tuning.conf
vm.swappiness = 10
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.core.somaxconn = 4096
Dica: Prefira criar arquivos em /etc/sysctl.d/ em vez de editar /etc/sysctl.conf diretamente. Isso facilita a organização e evita conflitos em atualizações.

Parâmetros úteis

ParâmetroPadrãoUso
vm.swappiness60Agressividade do uso de swap (0-100). Valores baixos priorizam RAM.
net.ipv4.ip_forward0Permite encaminhamento de pacotes. Essencial para roteadores e containers.
vm.overcommit_memory0Controla overcommit de memória. 0=heurístico, 1=sempre, 2=nunca.
net.core.somaxconn4096Tamanho da fila de conexões pendentes. Aumente para servidores web.
kernel.panic0Segundos para reiniciar após kernel panic. 0=nunca reinicia.
fs.file-maxvariaNúmero máximo de file descriptors no sistema.

Verificando o estado atual

# Ver todos os parâmetros de rede IPv4
sysctl net.ipv4 2>/dev/null | head -10

# Ver parâmetros de memória virtual
sysctl vm 2>/dev/null | head -10

# Verificar se IP forwarding está ativo
sysctl net.ipv4.ip_forward net.ipv6.conf.all.forwarding
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 0

/proc/sys/: explorando a árvore

A estrutura de /proc/sys/ reflete as categorias do sysctl:

ls /proc/sys/
abi  crypto  debug  dev  fs  kernel  net  user  vm

Cada diretório corresponde a um namespace: vm.*, net.*, kernel.*, etc.