Anzahl der hergestellten TCP-Verbindungen abrufen

Anzahl der hergestellten TCP-Verbindungen abrufen

Auf einem Linux-Server kann man verwenden, netstat -tan | grep ESTABLISHED| wc -laber auf einem Server mit hoher Auslastung funktioniert dies nicht watch -n1.

Dieser Ansatz funktioniert gut, wenn der Server nicht sehr ausgelastet ist oder das Überwachungsintervall groß genug ist. Aber was kann als Alternative für einen Server mit hoher Auslastung empfohlen werden?

Antwort1

Verwenden von /proc zur Reduzierung der Arbeitslast

Ich greife gerne zuKernelvariablendirekt über /proc. Das ist sehr effizient, schnell und systemschonend.

Es gibt eine Pseudodatei (Kernelvariablentabelle) mit dem Namen, /proc/net/tcpin der der Kernel die Liste der TCP-Verbindungen und -Abhörvorgänge speichert. Das 6. Feld, genanntstfürZustand0Akönnte einen Listeneintrag und 01eine hergestellte Verbindung enthalten .

ZählenTCP gegründetAnschlüsse:

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

oder

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

Ausführungszeit

Da diese Frage für ein System mit hoher Arbeitsbelastung steht, habe ich eine kleine Bank gemacht:

Methode Antwort in Millisekunden

grep Techno 2.48
awk kein regulärer Ausdruck ($4=="01") 2.51
sed | WC 2,67
awk mit regulärem Ausdruck 2.93

SS-Neopt-Staat gegründet | WC-L Suprjami 15.14
lsof -i tcp -s tcp:HERGESTELLT Tonioc 25055.00

Ok, Toniocs Antwort ist sehr langsam, aber aufgrund ihrer Ausführlichkeit sehr interessant. Auf Systemen mit hoher Arbeitslast also eindeutig nicht verwendbar.

Dieser Vergleichstest hat gezeigt, dass es sssich um ein sehr nützliches dediziertes Tool handelt. Das Abfragen /procvon Variablen könnte jedoch viel schneller gehen.

Antwort2

Verwenden Sie den Befehl:

ss -neopt state established

Dadurch werden Ihnen nur die TCP-Sitzungen im Status angezeigt ESTABLISHED. Eine Weiterleitung zu anderen Befehlen ist nicht erforderlich. Es ist also superschnell.

ssist besser als netstat, weil die ältere Version netstatnur aus procfs liest, das Dateisperren unterliegt. ssführt tatsächlich eine Abfrage innerhalb des Kernels durch, die vom Kernel-Scheduler verarbeitet wird und immer genaue Informationen zurückgibt.

Antwort3

Siehe auch:527875.

netstat + grepist eine gute und einfache Option für ein paar Verbindungen, aber wenn Sie eine große Anzahl von Verbindungen haben, würde ich empfehlen, sswie in empfohlenAbonnieren.

Zum Beispiel: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  

Antwort4

Es gibt auch lsof, das nach Protokoll und Status filtern kann: zum Beispiel um nach TCP ESTABLISHED-Verbindungen zu suchen:

~# lsof -i tcp -s tcp:ESTABLISHED

dann | wc -l zum Zählen. Hinweis: Ich habe die Kosten hierfür bei einer großen Anzahl von Verbindungen nicht ausprobiert.

verwandte Informationen