GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rufen Sie die Anzahl der hergestellten TCP-Verbindungen ab

Verwenden Sie den Befehl:

ss -neopt state established

Dadurch werden Ihnen nur TCP-Sitzungen in ESTABLISHED angezeigt Zustand, kein Umleiten zu anderen Befehlen erforderlich, also superschnell.

ss ist besser als netstat weil die ältere netstat liest nur aus procfs, das Dateisperren unterliegt. ss macht tatsächlich eine Abfrage innerhalb des Kernels, die vom Kernel-Scheduler behandelt wird und immer genaue Informationen zurückgibt.


Verwendung von /proc zur Reduzierung der Arbeitslast

Ich greife gerne auf Kernel-Variablen zu direkt über /proc . Das ist sehr effizient, schnell und systemfreundlich.

Es gibt eine Pseudodatei (Kernel-Variablentabelle) namens /proc/net/tcp wo Kernel speichert Liste der TCP-Verbindung und Listenning. Das 6. Feld, genannt st für Zustand könnte 0A enthalten für einen Höreintrag und 01 für eine aufgebaute Verbindung.

Zählen TCP eingerichtet Verbindungen:

Durch die Verwendung von grep
grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Durch die Verwendung von awk
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 Verwendung von sed
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. Ich habe eine kleine Bank gemacht:

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 Toniocs Antwort ist sehr langsam, aber durch seine Ausführlichkeit sehr interessant. Also eindeutig nicht auf Systemen mit hoher Arbeitslast verwendbar.

Diese Bank lässt Sie sehen, ob ss ist ein sehr nützliches dediziertes Tool, das nach /proc fragt Variablen könnten viel schneller sein.


Siehe auch:527875.

netstat + grep ist eine gute und einfache Option für wenige Verbindungen, aber wenn Sie eine große Anzahl von Verbindungen haben, würde ich ss empfehlen wie in nixCraft empfohlen.

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  

Linux
  1. Holen Sie sich die Ganzzahl der Obergrenze aus der Zahl in Linux (BASH)

  2. Wie erhalte ich die Anzahl der CPUs in Linux mit C?

  3. Wie man nur die Anzahl der Zeilen einer Datei erhält

  4. Node.js – Ruft die Anzahl der verfügbaren Prozessoren ab

  5. diff Befehl, um nur die Anzahl der verschiedenen Zeilen zu erhalten

So erhalten Sie die Anzahl der Prozessoren / Kerne in Linux

So erhalten Sie die beste Leistung vom Nginx-Server

TCP-Angriffe:TCP-Sequenznummernvorhersage und TCP-Reset-Angriffe

PuTTY-, CygwinX- und X11-Weiterleitungsverbindung abgelehnt

Was begrenzt die maximale Anzahl von Verbindungen auf einem Linux-Server?

Überprüfen Sie die Anzahl der aktiven Verbindungen auf Port 80?