Usa il comando:
ss -neopt state established
Questo ti mostrerà solo le sessioni TCP in ESTABLISHED
state, non è richiesto il piping ad altri comandi, quindi è super veloce.
ss
è migliore di netstat
perché il più vecchio netstat
legge solo da procfs che è soggetto a blocchi di file. ss
esegue effettivamente una query all'interno del kernel che viene gestita dallo scheduler del kernel e restituisce sempre informazioni accurate.
Utilizzare /proc per ridurre il carico di lavoro
Mi piace accedere alle variabili del kernel direttamente tramite /proc
. Questo è molto efficiente, rapido e intuitivo.
C'è uno pseudo file (tabella delle variabili del kernel) chiamato /proc/net/tcp
wherekernel archivia l'elenco delle connessioni TCP e dell'ascolto. Il sesto campo, chiamato st
per stato potrebbe contenere 0A
per una voce di ascolto e 01
per una connessione stabilita.
Conteggio TCP stabilito connessioni:
Usando grepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Usando awkawk </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 sedsed </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l
Tempo di esecuzione
Poiché questa domanda sta per sistema ad alto carico di lavoro. Ho fatto una piccola panca:
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 risposta di Tonioc è molto lenta, ma molto interessante per la sua verbosità. Quindi chiaramente non utilizzabile su sistemi ad alto carico di lavoro.
Questa panchina ti permette di vedere che if ss
è uno strumento dedicato molto utile, che chiede /proc
variabili potrebbero essere molto più veloci.
Controlla anche:527875.
netstat + grep
è una buona e semplice opzione per poche connessioni, ma se hai un numero enorme di connessioni ti consiglio ss
come consigliato in nixCraft.
Ad esempio: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