Utilisez la commande :
ss -neopt state established
Cela vous montrera uniquement les sessions TCP dans ESTABLISHED
état, aucune canalisation vers d'autres commandes requises, donc c'est super rapide.
ss
vaut mieux que netstat
parce que l'ancien netstat
lit simplement à partir de procfs qui est soumis à des verrous de fichiers. ss
effectue en fait une requête à l'intérieur du noyau qui est gérée par le planificateur du noyau et renvoie toujours des informations précises.
Utiliser /proc pour réduire la charge de travail
J'aime accéder aux variables du noyau directement via /proc
. C'est très efficace, rapide et convivial.
Il existe un pseudo fichier (table des variables du noyau) nommé /proc/net/tcp
wherekernel stocke la liste des connexions et des écoutes TCP. Le 6ème champ, appelé st
pour état peut contenir 0A
pour une entrée d'écoute et 01
pour une connexion établie.
Comptage TCP établi connexions :
En utilisant grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
En utilisant awkawk </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}'
En utilisant sedsed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
Temps d'exécution
Comme cette question représente un système à charge de travail élevée. J'ai fait un petit banc :
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
La réponse d'Ok Tonioc est très lente, mais très intéressante par sa verbosité. Donc clairement inutilisable sur un système à charge de travail élevée.
Ce banc vous permet de voir que si ss
est un outil dédié très utile, demandant /proc
les variables pourraient être beaucoup plus rapides.
Vérifiez également :527875.
netstat + grep
est une bonne et simple option pour quelques connexions, mais si vous avez un grand nombre de connexions, je recommanderais ss
comme recommandé dans nixCraft.
Par exemple :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