Limites de Conexão HTTP
Este documento descreve como funciona a gestão e limitação de conexões simultâneas no servidor HTTP Jetty dentro do framework.
Conceito Geral O sistema utiliza um mecanismo de controle baseado no número total de threads configuradas para garantir que o servidor nunca esgote seus recursos completamente. Isso permite que ele continue respondendo com status de erro (HTTP 503) mesmo sob carga máxima, além de preservar acesso para ferramentas de diagnóstico.
Parâmetros de Configuração
Local de Configuração:
As configurações do Jetty devem ser realizadas no arquivo config.ini do ambiente.
As configurações devem ser feitas no arquivo de configuração do runtime (config.ini).
| Parâmetro | Descrição | Padrão |
|---|---|---|
http.maxThreads | Número máximo de threads no pool do Jetty. | 208 |
http.maxSessionConnections | Limite de conexões simultâneas por cabeçalho Authorization. | 0 (ilimitado) |
http.maxWebConnections | Limite global de conexões simultâneas para clientes Web (header X-Client-Id). | 0 (ilimitado) |
Cálculo de Limites Automáticos
O limite de conexões "normais" é derivado automaticamente do parâmetro http.maxThreads seguindo a fórmula:
Limite Normal = maxThreads - Folga Operacional (8)
1. Folga Operacional (8 threads)
Estas 8 threads são reservadas para o funcionamento interno do Jetty (Acceptors, Selectors e housekeeping). Sem essa folga, o servidor poderia entrar em Thread Starvation, parando de aceitar novas conexões ou falhando em enviar a resposta 503 quando o limite é atingido.
2. Reserva de Debug (3 threads)
O framework reserva permanentemente 3 slots de conexão para requisições direcionadas a caminhos que iniciam com
/debug/. Isso garante que, mesmo quando o sistema está rejeitando conexões normais por excesso de carga,
administradores ainda consigam acessar métricas e ferramentas de diagnóstico.
Tipos de Limitação
-Limite Global (Normal):Aplica-se a todas as requisições que não são de debug. Quando o número de conexões ativas
atinge o Limite Normal, novas requisições recebem imediatamente umHTTP 503 (Service Unavailable).
-**Limite por Sessão (http.maxSessionConnections):**Se configurado (valor > 0), o framework monitora as conexões
identificadas pela sessão. Cada identificador de sessão único não pode exceder este limite de conexões simultâneas.
Esta trava não identifica o usuário em si, mas sim cada login que este usuário possui.
-**Limite para Web (http.maxWebConnections):**Aplica-se quando utilizando os clientes Web ou Vue. É um limite
compartilhado entre todos os usuários que utilizam a interface web, servindo como uma camada extra de proteção contra
picos de tráfego originados do front-end.
Comportamento de Rejeição
Sempre que um dos limites acima é atingido, o servidor executa os seguintes passos:
- Interrompe o processamento da requisição antes de chegar à lógica de negócio.
- Define o status HTTP como
503. - Encerra a conexão de forma limpa.
Exemplo de Configuração
Exemplo focado em controle de carga e limites por sessão no config.ini:
# Pool de Threads
http.maxThreads=500
http.minThreads=20
# Restrições de Conexão
http.maxSessionConnections=5
http.maxWebConnections=100
# Buffers (Avançado)
http.outputBufferSize=32768
http.requestHeaderSize=8192
Nota: Isso evita o enfileiramento excessivo de requisições no sistema operacional, o que causaria aumento de latência e consumo desnecessário de memória.