Muitas vezes, durante o processo de solução de problemas e ajustes, me pego pensando nas seguintes configurações do kernel do Linux:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Diferente fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, e net.ipv4.tcp_wmem
, que parece ser os botões importantes para mexer com quando você está ajustando uma caixa para altos níveis de concorrência.
Minha pergunta: como posso verificar quantos itens existem em cada uma dessas filas? Geralmente, as pessoas apenas as definem como super altas, mas eu gostaria de registrar esses tamanhos de fila para ajudar a prever falhas futuras e detectar problemas antes que eles se manifestem de maneira perceptível ao usuário.
linux
kernel
networking
tcp
Colin Hostert
fonte
fonte
Respostas:
Eu também me perguntei isso e fui motivado por sua pergunta!
Eu coletei o quão perto eu poderia chegar de cada uma das filas listadas com algumas informações relacionadas a cada uma. Congratulo-me com comentários / feedback, qualquer melhoria no monitoramento torna as coisas mais fáceis de gerenciar!
Irá mostrar a contagem global atual de conexões na fila, você pode dividir isso por porta e colocar isso nas instruções exec em snmpd.conf, se você quiser pesquisá-lo em um aplicativo de monitoramento.
A partir de:
Eles mostrarão com que frequência você está vendo solicitações da fila:
A partir de:
http://linux.die.net/man/5/proc
Este arquivo (somente leitura) fornece o número de arquivos atualmente abertos. Ele contém três números: o número de identificadores de arquivo alocados, o número de identificadores de arquivo gratuitos e o número máximo de identificadores de arquivo.
Se você puder criar uma lista de exclusão de serviços (netstat -an | grep LISTEN), poderá deduzir quantas conexões estão sendo usadas para atividades efêmeras:
Também deve monitorar (do SNMP):
Também pode ser interessante coletar estatísticas sobre todos os estados vistos nesta árvore (estabeleceu / time_wait / fin_wait / etc):
Você teria que rastrear / rastrear seu sistema para solicitações de setsockopt. Não acho que as estatísticas desses pedidos sejam rastreadas de outra forma. Este não é realmente um valor que muda da minha compreensão. O aplicativo que você implantou provavelmente solicitará um valor padrão. Eu acho que você pode 'perfilar' seu aplicativo com strace e configurar esse valor de acordo. (discutir?)
Para rastrear o quão perto você está do limite, seria necessário examinar a média e o máximo dos campos tx_queue e rx_queue de (regularmente):
Para rastrear erros relacionados a isso:
Também deve monitorar o pool global de 'buffer' (via SNMP):
fonte
Eu acho que você pode conseguir esses dados com o SystemTap. Aqui está o manual de referência da Redhat (pdf) . Há também um guia para iniciantes (pdf) .
A ferramenta parece versátil o suficiente para permitir que você obtenha esses dados, em particular se
probe::netdev.rx
parece com algo que fornecerá informações sobre entradas recebidas, agora "apenas" você precisa encontrar o tamanho da rede da fila no buffer ou algo que conta coisas saindo da fila ...fonte