GNU/Linux >> Tutoriales Linux >  >> Linux

Obtener el número de conexiones TCP establecidas

Usa el comando:

ss -neopt state established

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

ss es mejor que netstat porque el mayor netstat solo lee de procfs que está sujeto a bloqueos de archivos. ss en realidad hace una consulta dentro del kernel que es manejada por el programador del kernel y siempre devuelve información precisa.


Uso de /proc para reducir la carga de trabajo

Me gusta acceder a las variables del kernel directamente 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/tcp wherekernel almacena la lista de conexiones y escuchas TCP. El sexto campo, llamado st para estado podría contener 0A para una entrada de escucha y 01 para una conexión establecida.

Contando TCP establecido conexiones:

Usando grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Usando awk
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}'
Usando sed
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:

Method                                Answer by     Milliseconds

grep                                  Techno        2.48
awk no regexp ($4=="01")                            2.51
sed | wc                                            2.67
awk with regexp                                     2.93

ss -neopt state established | wc -l   Suprjami     15.14
lsof -i tcp -s tcp:ESTABLISHED        Tonioc    25055.00

Ok, la respuesta de Tonioc es muy lenta, pero muy interesante por su verbosidad. Así que claramente no se puede usar en un sistema de alta carga de trabajo.

Este banco te permite ver que si ss es una herramienta dedicada muy útil, preguntando /proc las variables podrían ser mucho más rápidas.


Consulta también:527875.

netstat + grep es una opción buena y simple para algunas conexiones, pero si tiene una gran cantidad de conexiones, recomendaría ss como se recomienda en nixCraft.

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  

Linux
  1. Limitar el máximo de conexiones TCP a servidores web

  2. Obtenga el número entero del techo del número en Linux (BASH)

  3. ¿Cómo obtener la cantidad de CPU en Linux usando C?

  4. ¿Cómo matar una sola conexión TCP en Linux?

  5. Node.js:obtenga la cantidad de procesadores disponibles

Cómo obtener la cantidad de procesadores/núcleos en Linux

Cómo obtener el mejor rendimiento del servidor Nginx

Ataques TCP:Predicción del número de secuencia TCP y Ataques de restablecimiento TCP

Cómo obtener solo el número de líneas de un archivo

Obtenga el valor actual/predeterminado de TCP initcwnd en Linux

Compruebe el Número de conexiones activas en el puerto 80?