
En un servidor Linux se puede utilizar, netstat -tan | grep ESTABLISHED| wc -l
pero 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/tcp
donde el kernel almacena la lista de conexiones TCP y escucha. El sexto campo, llamadost
paraestadopodría contener 0A
para una entrada de escucha y 01
para una conexión establecida.
Contandotcp establecidoconexiones:
Mediante el usogrepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Mediante el usoawk
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 usosed
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 ss
es una herramienta dedicada muy útil, preguntar /proc
variables podría ser mucho más rápido.
Respuesta2
Utilice el comando:
ss -neopt state established
Esto le mostrará solo las sesiones TCP en ESTABLISHED
estado, no se requiere conexión a otros comandos, por lo que es súper rápido.
ss
es mejor que netstat
porque el anterior netstat
simplemente lee de procfs, que está sujeto a bloqueos de archivos. ss
en 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 + grep
es una opción buena y simple para algunas conexiones, pero si tiene una gran cantidad de conexiones, recomendaría ss
lo 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.