Eu tenho uma hipótese: às vezes as conexões TCP chegam mais rapidamente do que o meu servidor pode accept()
. Eles ficam na fila até a fila exceder e, em seguida, há problemas.
Como posso confirmar que isso está acontecendo?
Posso monitorar o comprimento da fila de aceitação ou o número de estouros? Existe um balcão exposto em algum lugar?
netstat
mostra apenas os comprimentos da fila de envio e recebimento, que não são iguais à fila de aceitação.
man netstat | less +/Flags
netstat
, parece não aparecer Flags
para as conexões TCP. A partir de um pequeno teste, parece que as conexões são mostradas como ESTABLISHED
em netstat
, mesmo que eu tente abrir conexões para um processo que ocorre, listen()
mas nunca accept()
.
SYN_RECV
. Não há outra fila além disso. Suponho que o kernel possa ser instruído de alguma forma a registrar pacotes descartados por causa de muitas conexões semi-abertas, mas há mais de 10 anos desde que eu olhei para a rede com Linux, então não tenho idéia de como fazer isso. Em uma nota lateral: você não está esperando para accept()
fazer o trabalho, está esperando ACK
s chegarem dos hosts de conexão para concluir as conexões.
netstat
.