Como verifico quantas conexões estão abertas atualmente em uma porta TCP específica?

8

Estou fazendo alguns benchmarks de cometas e gostaria de ver quantas conexões abertas eu tenho.

Na verdade eu uso o netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Mas ele precisa de cerca de 4-6 minutos para listar o número. Existe alguma ferramenta que possa mostrá-lo em tempo real? O número de conexões abertas está entre 100'000 - 250'000.

Nenad
fonte
Com base no que você está tentando realizar, você considerou usar o NetFlow e uma ferramenta de análise?
precisa
@ SpacemanSpiff Espero que exista alguma solução fácil, mas vou dar uma olhada no NetFlow, pois não tenho certeza se está trabalhando com um switch HP.
Nenad
Você sabe, eu me pergunto se uma consulta perfmon ou WMI pode trazer esses dados de volta da pilha TCP mais rapidamente ... ainda ... você está atrás de portas abertas ou transferências de dados ativas?
precisa
@SpacemanSpiff Estou atrás de portas abertas procurando
Nenad
Talvez uma consulta SNMP? ... apenas lançando idéias para você.
precisa

Respostas:

8

Não sei se lsofé melhor, mas tente:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l
ThorstenS
fonte
realmente lsof levar de 5 segundos, mas eu tenho 20'000 conexões e contagem :-) vai deixar você saber quanto tempo depois de passar 100K
Nenad
update: ter alguns problemas com os nossos clientes de cometas, mas lsof é muito mais rápido de 10 segundos para 30'000 conexões, irá atualizar depois que fixa as questões de cometas e foi capaz de verificar acima 100K conexões
Nenad
atualização: 15seg para mostrar 130'000 conexões - obrigado! Isso faz o trabalho para mim, para uma solução mais detalhada, um analisador de rede deve ser usado.
Nenad
maravilhoso! Você também pode usar o interruptor -t- talvez isso lhe dê um pequeno impulso.
precisa
5

Se você só precisa ver as estatísticas de conexão, tente o ssutilitário do iprouteconjunto:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

Você também pode visualizar informações detalhadas sobre todas as conexões estabelecidas como esta:

ss -n state established

… Ou apenas conexões ssh:

ss -n state established '( dport = :ssh or sport = :ssh )'

A seção de alguns números na parte inferior desta página também pode lhe interessar.

artyom
fonte
+1 para não usar o netstat deprecated
Joshua Griffiths
Eu sei que isso é de 6 anos atrás, mas você ou alguém mais tem um link para algo que interrompe a saída do status ss. Estou especificamente curioso sobre a contagem de portas no final da linha TCP. Estou fazendo alguns testes de comparação entre dois servidores que atuam como balanceadores de carga e, em um, a contagem de portas fica em torno de 1000 e, no outro, é sempre 0. O que é especificamente isso?
precisa saber é o seguinte
1
@RobertRSeattle pelo código-fonte ss, parece que esse número é lido da tcp_bind_bucketlinha do /proc/slabinfoarquivo. Você pode comparar a saída awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfoentre dois de seus servidores. Detalhes adicionais provavelmente podem ser encontrados em algum lugar nas fontes do kernel.
Artyom 11/01/19
1

Outra opção seria ler /proc/net/tcpdiretamente. Para ver todas as conexões TCP estabelecidas no 8080, você faria algo como

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Se você quiser fazer isso em um único processo (menos sobrecarga de E / S) e lidar com casos de canto, a seguir, será informado quantas conexões TCP ESTABELECIDAS possuem a porta local 8080:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Se o software em sua máquina escutando 8080 tiver suporte para IPv6, você também precisará ler /proc/net/tcp6; se o programa estiver usando soquetes IPv6, as conexões aparecerão lá, mesmo se eles estiverem usando IPv4.

Jon
fonte
0

mais fácil é

#netstat -at | wc -l

Ele exibirá o número de conexão TCP no sistema ...

user162048
fonte
Isso levará mais tempo, já que você não está usando o sinalizador "n" para impedir a pesquisa de todos os nomes de host. Também mostrará outras coisas além das conexões da porta 8080 que tratavam da questão.
Jenny D