
Auf einem Linux-Server kann man verwenden, netstat -tan | grep ESTABLISHED| wc -l
aber 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/tcp
in der der Kernel die Liste der TCP-Verbindungen und -Abhörvorgänge speichert. Das 6. Feld, genanntst
fürZustand0A
könnte einen Listeneintrag und 01
eine hergestellte Verbindung enthalten .
ZählenTCP gegründetAnschlüsse:
Durch die Nutzunggrepgrep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '
Durch die Nutzungawk
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 Nutzungsed
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 ss
sich um ein sehr nützliches dediziertes Tool handelt. Das Abfragen /proc
von 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.
ss
ist besser als netstat
, weil die ältere Version netstat
nur aus procfs liest, das Dateisperren unterliegt. ss
fü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 + grep
ist eine gute und einfache Option für ein paar Verbindungen, aber wenn Sie eine große Anzahl von Verbindungen haben, würde ich empfehlen, ss
wie 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.