Obtener el número de conexiones TCP establecidas

Obtener el número de conexiones TCP establecidas

En un servidor Linux se puede utilizar, netstat -tan | grep ESTABLISHED| wc -lpero esto no funcionará en un servidor de alta carga con watch -n1.

Este enfoque funciona bien si el servidor no está muy ocupado o el intervalo de monitoreo es lo suficientemente grande. Pero, ¿qué se puede recomendar como alternativa para un servidor de alta carga?

Respuesta1

Usando /proc para reducir la carga de trabajo

me gusta accedervariables del núcleodirectamente a través de /proc. Esto es muy eficiente, rápido y amigable con el sistema.

Hay un pseudo archivo (tabla de variables del kernel) llamado /proc/net/tcpdonde el kernel almacena la lista de conexiones TCP y escucha. El sexto campo, llamadostparaestadopodría contener 0Apara una entrada de escucha y 01para una conexión establecida.

Contandotcp establecidoconexiones:

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

o

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

Tiempo de ejecución

Como esta pregunta representa un sistema de alta carga de trabajo. He hecho un pequeño banco:

Método de respuesta en milisegundos

grep Techno 2.48
awk sin expresión regular ($4=="01") 2.51
sed | baño 2.67
awk con expresión regular 2.93

Estado ss-neopt establecido | wc -l Suprjami 15.14
lsof -i tcp -s tcp:ESTABLECIDO Tonioc 25055.00

Ok, la respuesta de Tonioc es muy lenta, pero muy interesante por su verbosidad. Claramente no se puede utilizar en un sistema de alta carga de trabajo.

Este banco te permite ver que si sses una herramienta dedicada muy útil, preguntar /procvariables podría ser mucho más rápido.

Respuesta2

Utilice el comando:

ss -neopt state established

Esto le mostrará solo las sesiones TCP en ESTABLISHEDestado, no se requiere conexión a otros comandos, por lo que es súper rápido.

sses mejor que netstatporque el anterior netstatsimplemente lee de procfs, que está sujeto a bloqueos de archivos. ssen realidad realiza una consulta dentro del kernel que es manejada por el programador del kernel y siempre devuelve información precisa.

Respuesta3

Consulte también:527875.

netstat + grepes una opción buena y simple para algunas conexiones, pero si tiene una gran cantidad de conexiones, recomendaría sslo recomendado ennixCraft.

Por ejemplo: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  

Respuesta4

También existe lsof, que puede filtrar por protocolo y estado: por ejemplo para buscar conexiones TCP ESTABLECIDAS:

~# lsof -i tcp -s tcp:ESTABLISHED

entonces | wc -l para contar. Nota: no probé el costo de esto con una gran cantidad de conexiones.

información relacionada