linux: netstat comprimento da fila de escuta

7

Existe uma maneira de ver o tamanho da fila no socket de escuta no Linux, da mesma forma que netstat -L produz para o FreeBSD? Ou seja você pode ver X / Y / Z em netstat -L output, mas o netstat no Linux não suporta -L flag.

    
por Artem G 26.09.2012 / 05:42

5 respostas

9

ss -l mostra o correto Recv-Q Send-Q.

    
por 28.09.2012 / 00:35
6

Vamos analisar o código-fonte, pois é a melhor documentação no mundo do código aberto.

net / ipv4 / tcp_diag.c:

if (sk->sk_state == TCP_LISTEN) {
    r->idiag_rqueue = sk->sk_ack_backlog;
    r->idiag_wqueue = sk->sk_max_ack_backlog;
} else {
    r->idiag_rqueue = max_t(int, tp->rcv_nxt - tp->copied_seq, 0);
    r->idiag_wqueue = tp->write_seq - tp->snd_una;
}

A mesma coisa que podemos ver em sockets de domínio unix, net / unix / diag.c:

if (sk->sk_state == TCP_LISTEN) {
    rql.udiag_rqueue = sk->sk_receive_queue.qlen;
    rql.udiag_wqueue = sk->sk_max_ack_backlog;
} else {
    rql.udiag_rqueue = (u32) unix_inq_len(sk);
    rql.udiag_wqueue = (u32) unix_outq_len(sk);
}

Então.

Se o soquete for estabelecido, Recv-Q e Send-Q significa bytes, conforme descrito na documentação.
Se o soquete estiver escutando, Recv-Q significa o tamanho atual da fila e Send-Q significa um backlog configurado.

Indo mais fundo em mans nos dá folowing em sock_diag (7) :

      UDIAG_SHOW_RQLEN
             The attribute reported in answer to this request is
             UNIX_DIAG_RQLEN.  The payload associated with this
             attribute is represented in the following structure:

                 struct unix_diag_rqlen {
                     __u32 udiag_rqueue;
                     __u32 udiag_wqueue;
                 };

             The fields of this structure are as follows:

             udiag_rqueue
                    For listening sockets: the number of pending
                    connections.  The length of the array associated
                    with the UNIX_DIAG_ICONS response attribute is
                    equal to this value.

                    For established sockets: the amount of data in
                    incoming queue.

             udiag_wqueue
                    For listening sockets: the backlog length which
                    equals to the value passed as the second argu‐
                    ment to listen(2).

                    For established sockets: the amount of memory
                    available for sending.

Em outras palavras, ss -ln é o único comando que você precisa

    
por 13.09.2018 / 07:54
3

Não há uma maneira simples de ver isso no Linux, tanto quanto eu sei. Recv-Q e Send-Q não são fila de escuta. Eles são a contagem de bytes não copiados pelo programa do usuário conectado ao soquete e não reconhecidos pelo host remoto (consulte man netstat). Então eles são sobre conexões estabelecidas. A fila Listen (accept) é um lugar onde o kernel mantém novas conexões de entrada até que seu aplicativo chame accept ().

    
por 19.09.2017 / 08:08
1

awk pode ajudar:

netstat -ntp | awk '{ if ($6 == "ESTABLISHED" && $7 == "-") arrQueue[$4] += 1; } END { for (service in arrQueue) print service" "arrQueue[service] }'

Fonte: link

    
por 26.09.2012 / 06:29
0

Além do ss (clássica iproute), há ss2 (pyroute) agora para faça isso.

    
por 16.03.2019 / 08:54