Descobri esse problema ao tentar carregar um servidor websocket node.js customizado, em que alguns soquetes não estão conectados (eles atingiram o tempo limite da conexão). Ele não parece estar relacionado à carga atual, já que também posso obter aleatoriamente a falha em apenas um único teste de thread do cliente.
Isso parece não estar relacionado a node.js, pois também posso reproduzir o teste de carga de problemas nginx, que está servindo uma página estática no mesmo servidor. A taxa de falha geral parece estar entre 7-10% das conexões de entrada falhará.
Isso não parece ser um problema em minha máquina cliente local ou conexão com a Internet, pois posso reproduzir o problema de outra máquina em um local diferente.
Eu verifiquei todos os sintonizadores normais (somaxconn, max arquivos abertos, etc), e tanto quanto eu posso dizer que estou longe de atingir quaisquer limites. Eu não estou vendo nenhuma entrada no syslog relacionada a este problema. Eu também tentei desativar completamente o iptables para evitar qualquer problema de firewall.
O servidor é o Ubuntu LTS 16.04 (i7, 32GB) e é uma máquina dedicada em uma instalação de colo. Antes de entrar em contato, queria ver se conseguia encontrar mais dados sobre se isso é um problema no nível de O / S, no nível da máquina ou no nível da rede.
Consegui capturar um tcpdump de uma conexão com falha, mas não tenho certeza do que fazer com ele:
07:19:29.952730 IP localmachine.53949 > server.30312: Flags [S], seq 2408213894, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:19:29.952879 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:30.951778 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:32.949553 IP localmachine.53949 > server.30312: Flags [S], seq 2408213894, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:19:32.949650 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:34.947783 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:38.947699 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:38.950399 IP localmachine.53949 > server.30312: Flags [S], seq 2408213894, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
07:19:38.950438 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
07:19:46.947769 IP server.30312 > localmachine.53949: Flags [S.], seq 1245200353, ack 2408213895, win 28200, options [mss 1410,nop,nop,sackOK,nop,wscale 7], length 0
Parece que o ACK do servidor nunca está chegando ao cliente e o cliente continua tentando SYN e o servidor continua tentando responder até que o tempo limite da conexão seja atingido. Isso é sobre onde meu conhecimento é revelado e não tenho certeza do que fazer com essa informação. O que poderia causar esse tipo de problema ou o que mais eu deveria analisar?
Tags networking sockets linux tcp