Obtenha o número de conexões TCP estabelecidas

Obtenha o número de conexões TCP estabelecidas

Em um servidor Linux pode-se usar, netstat -tan | grep ESTABLISHED| wc -lmas isso não funcionará em um servidor de alta carga com watch -n1.

Essa abordagem funciona bem se o servidor não estiver muito ocupado ou se o intervalo de monitoramento for grande o suficiente. Mas o que pode ser recomendado como alternativa para um servidor de alta carga?

Responder1

Usando /proc para reduzir a carga de trabalho

eu gosto de acessarvariáveis ​​do kerneldiretamente através de /proc. Isto é muito eficiente, rápido e amigável ao sistema.

Existe um pseudo arquivo (tabela de variáveis ​​do kernel) chamado /proc/net/tcponde a lista de armazenamento do kernel de conexão TCP e escuta. O 6º campo, chamadostparaestadopoderia conter 0Apara uma entrada de escuta e 01para uma conexão estabelecida.

ContandoTCP estabelecidoconexões:

Usando
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Usando
awk  </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'

ou

awk  </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'
Usando
sed  </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l

Tempo de execução

Como esta questão representa um sistema de alta carga de trabalho. Eu fiz um pequeno banco:

Método de resposta por milissegundos

grepTecno 2.48
awk sem expressão regular ($4=="01") 2,51
sed | wc 2,67
awk com regexp 2.93

estado ss-neopt estabelecido | wc -l Suprijami 15.14
lsof -i tcp -s tcp:ESTABELECIDO Tonioc 25055.00

Ok, a resposta do Tonioc é muito lenta, mas muito interessante pela sua verbosidade. Claramente não pode ser usado em sistemas de alta carga de trabalho.

Este banco permite que você veja que se ssfor uma ferramenta dedicada muito útil, perguntar /procvariáveis ​​poderia ser muito mais rápido.

Responder2

Use o comando:

ss -neopt state established

Isso mostrará apenas sessões TCP no ESTABLISHEDestado, sem necessidade de canalização para outros comandos, por isso é super rápido.

ssé melhor do que netstatporque o mais antigo netstatapenas lê procfs que está sujeito a bloqueios de arquivo. ssna verdade, faz uma consulta dentro do kernel que é tratada pelo escalonador do kernel e sempre retorna informações precisas.

Responder3

Verifique também:527875.

netstat + grepé uma opção boa e simples para algumas conexões, mas se você tiver um grande número de conexões, eu recomendaria ssconforme recomendado emNixCraft.

Por exemplo:ss -s

Total: 78 (kernel 79)
TCP:   31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16

Transport Total     IP        IPv6
*     79        -         -        
RAW   0         0         0        
UDP   4         2         2        
TCP   31        2         29       
INET      35        4         31       
FRAG      0         0         0  

Responder4

Há também o lsof, que pode filtrar por protocolo e estado: por exemplo, para procurar conexões TCP ESTABLISHED:

~# lsof -i tcp -s tcp:ESTABLISHED

então | wc -l para contar. Nota: não experimentei o custo disso com um grande número de conexões.

informação relacionada