O que faz com que “SYN to LISTEN sockets dropped”?

1

Um servidor proxy bastante ocupado tem muitos "SYNs para LISTEN sockets dropados".

Aprendi que uma causa pode ser um tamanho pequeno demais para o backlog. Mas, nesse caso, o valor "vezes que a fila de escuta de um soquete transbordou" deve ser igual (o que não é).

Então, o que poderia ser uma causa para esse comportamento? Talvez um nic quebrado?

Temos 5 proxies, em 2 dos quais os dois números não são iguais, então esse problema parece estar acontecendo lá.

Aqui a saída do netstat:

$ netstat -s | grep -i list
238627 times the listen queue of a socket overflowed
8610307 SYNs to LISTEN sockets dropped

os servidores possuem tráfego ipv4 e ipv6, talvez isso ajude?

    
por edlerd 24.11.2014 / 12:14

1 resposta

4

Esses contadores, em última instância, vêm do kernel e mapeiam para os contadores LINUX_MIB_LISTENOVERFLOWS e LINUX_MIB_LISTENDROPS . Você pode ver a partir da fonte de net / ipv4 / tcp_ipv4.c (tcp_v4_syn_recv_sock) em torno da linha # 1392 que quando LINUX_MIB_LISTENOVERFLOWS é incrementado, LINUX_MIB_LISTENDROPS também será incrementado, mas há condições de saída em que somente o último pode ser incrementado, então não é um bug que eles não combinam.

No mesmo arquivo, você pode ver que existe esse código:

1291 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
1292 {
1293         /* Never answer to SYNs send to broadcast or multicast */
1294         if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
1295                 goto drop;
1296 
1297         return tcp_conn_request(&tcp_request_sock_ops,
1298                                 &tcp_request_sock_ipv4_ops, sk, skb);
1299 
1300 drop:
1301         NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
1302         return 0;
1303 }

Assim, você pode ver que pelo menos uma causa é um SYN para um endereço de broadcast ou multicast.

    
por 24.11.2014 / 12:45