Estou fazendo um planejamento de capacidade e fiquei pensando se existe uma fórmula que eu possa usar para prever (do ponto de vista da memória) quantas conexões TCP eu poderia manipular no meu servidor. No momento, estou preocupado apenas com os requisitos de memória.
Algumas variáveis que eu acho que aparecerão na fórmula são:
- sysctl's
net.ipv4.tcp_wmem
(valor mínimo ou padrão) - sysctl's
net.ipv4.tcp_rmem
(valor mínimo ou padrão) - o tamanho da meia, sock_common, proto e outras estruturas de dados por soquete.
Não tenho certeza de quanto dos tcp_wmem e tcp_rmem são realmente alocados e quando essa memória é alocada. No momento da criação do soquete? Sob demanda?
O tcp_mem é mais importante porque define como a pilha tcp deve se comportar quando se trata de uso de memória. O buffer de envio e recebimento do IMO deve ser um múltiplo de tcp_mem. Aqui está um link para uma fórmula para buffer de recebimento: http://www.acc.umu.se/~maswan/linux-netperf.txt . Em resumo:
Aqui está o que o artigo diz sobre tcp_mem:
Na IMO, um valor médio maior de tcp_mem acelera a conexão com a perda de menos segurança e aumenta ligeiramente a utilização de memória.
Você pode monitorar a pilha de rede com:
fonte
David forneceu uma resposta muito boa à pergunta, mas, a menos que você esteja usando exclusivamente LFNs , mesmo em um servidor baseado em eventos, os buffers TCP provavelmente serão apenas uma pequena parte do espaço por conexão.
Para o planejamento de capacidade, não há substituto para testar o servidor e calcular a regressão do uso de memória por carga.
fonte