implant limits

Eleva os limites de file descriptors (nofile) e de processos/threads (nproc) em duas camadas: sessões de usuário via PAM (/etc/security/limits.conf) e serviços via drop-ins do systemd.

Os limites padrão da maioria das distribuições (nofile 1024) são pequenos para servidores com muitas conexões simultâneas — proxies reversos, bancos de dados, runtimes como Node.js. Quando o limite estoura, o serviço passa a falhar com Too many open files.

Uso

implant limits [OPTIONS] <SUBCOMANDO>

Requer root. As opções do comando (--dry-run) vêm antes do subcomando:

sudo implant limits --dry-run apply

Subcomandos

Subcomando Descrição
apply Adiciona o bloco de limites ao limits.conf e grava os drop-ins do systemd
revert Remove o bloco, os drop-ins e o tuning de capacidade do kernel
status Mostra quais camadas estão aplicadas

Flags

Flag Descrição
--dry-run Simula sem aplicar mudanças
-o, --output <FORMATO> human (padrão), json ou yaml
-v, --verbose Mostra os comandos executados
-c, --config <ARQUIVO> Arquivo de configuração (padrão /etc/protocolo-implant/config.toml)
-t, --token <TOKEN> Token de identificação do servidor (ou PROTOCOLO_TOKEN)

O que é aplicado

1. `/etc/security/limits.conf` (sessões via PAM)

Se o arquivo ainda não tem o bloco do implant, faz backup (limits.conf.backup.<timestamp>) e acrescenta ao final um bloco delimitado por um marcador de início e um de fim:

# Limites configurados pelo Protocolo Implant
# nofile: Máximo de file descriptors (1M - padrão empresarial)
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576

# nproc: Máximo de processos/threads por usuário
* soft nproc 65535
* hard nproc 65535
root soft nproc 65535
root hard nproc 65535
# Fim limites Implant

As linhas root existem porque o curinga * não se aplica ao root no PAM. Os novos limites valem para novas sessões (novo login SSH, novo su).

2. Drop-ins do systemd (serviços)

Grava o mesmo conteúdo em dois arquivos:

  • /etc/systemd/system.conf.d/99-implant-limits.conf — serviços do sistema
  • /etc/systemd/user.conf.d/99-implant-limits.conf — serviços de usuário
# Limites systemd configurados pelo Protocolo Implant
[Manager]
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=65535

Em seguida roda systemctl daemon-reexec (ou daemon-reload como fallback). Serviços já em execução mantêm os limites antigos até serem reiniciados. Unidades que definem LimitNOFILE=/LimitNPROC= próprios continuam usando os seus valores.

O apply é idempotente: o bloco do limits.conf não é duplicado e os drop-ins são regravados com o mesmo conteúdo.

Status

Campo Significado
limits_conf_applied limits.conf contém o bloco do implant
systemd_system_applied Drop-in de sistema existe
systemd_user_applied Drop-in de usuário existe

Relação com `check --auto-fix`

O check --auto-fix avalia os limites efetivos (o que o PAM e o systemd realmente aplicam, considerando também /etc/security/limits.d/) e só grava quando estão abaixo do mínimo. Além das duas camadas acima, ele aplica um tuning de capacidade do kernel em /etc/sysctl.d/99-implant.conf (fs.file-max, fs.nr_open, inotify, filas de rede, conntrack, entre outros) e os ulimits do Docker (ver docker-limits). O implant limits apply não grava o 99-implant.conf.

Como reverter

sudo implant limits revert

O revert:

  1. remove do /etc/security/limits.conf só o bloco do implant: o que está entre # Limites configurados pelo Protocolo Implant e # Fim limites Implant, mais a linha em branco que o precede. O resto do arquivo — inclusive linhas adicionadas depois do apply — fica intacto;
  2. apaga /etc/sysctl.d/99-implant.conf (tuning de capacidade gravado pelo check --auto-fix), sem recarregar o sysctl — os valores atuais seguem no kernel até o próximo reboot ou sysctl --system;
  3. apaga os dois drop-ins do systemd e roda systemctl daemon-reload.

Blocos gravados até a 2.54.0 não têm o marcador de fim. Nesse caso o revert remove o marcador de início e apenas as linhas seguintes no formato que o implant grava (<*|root> <soft|hard> <nofile|nproc> <número>, os comentários # nofile:/# nproc: e linhas em branco), parando na primeira linha diferente. Uma linha sua no mesmo formato, colada logo depois do bloco antigo, seria levada junto — se for o caso, confira o arquivo antes.

Com --dry-run, o revert só anuncia a escrita. implant reset --limits faz a mesma reversão.

Os limites não fazem parte do emergency-mode; para desfazê-los, use revert.

Exemplos

# Simular
sudo implant limits --dry-run apply

# Aplicar e conferir
sudo implant limits apply
sudo implant limits status

# Conferir o limite efetivo de um serviço já reiniciado
systemctl show nginx --property=LimitNOFILE

# Reverter
sudo implant limits revert

Saída JSON do status (resumida):

{
  "success": true,
  "command": "limits",
  "data": {
    "action": "status",
    "target": "limits",
    "result": "completed",
    "dry_run": false,
    "state": {
      "limits_conf_applied": true,
      "systemd_system_applied": true,
      "systemd_user_applied": true
    }
  }
}

Veja também

  • docker-limits — os mesmos limites para containers
  • sysctl — hardening base do kernel
  • check — aplica limites e tuning de capacidade no --auto-fix
  • reset — --limits