Wie überprüfe ich, wie viele Verbindungen derzeit an einem bestimmten TCP-Port geöffnet sind?

8

Ich mache einige Kometen-Benchmarks und würde gerne sehen, wie viele offene Verbindungen ich habe.

Eigentlich benutze ich netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Aber es dauert ungefähr 4-6 Minuten, um die Nummer aufzulisten. Gibt es ein Tool, das sie in Echtzeit anzeigen kann? Die Anzahl der offenen Verbindungen liegt zwischen 100'000 - 250'000.

Nenad
quelle
Haben Sie in Betracht gezogen, NetFlow und ein Analysetool zu verwenden, basierend auf dem, was Sie erreichen möchten?
SpacemanSpiff
@SpacemanSpiff Ich hoffe, es gibt eine einfache Lösung, aber ich werde einen Blick auf NetFlow werfen, da ich nicht sicher bin, ob ich mit einem HP-Switch arbeite.
Nenad
Wissen Sie, ich frage mich, ob eine Perfmon- oder WMI-Abfrage diese Daten möglicherweise schneller vom TCP-Stack zurückbringt ... immer noch ... sind Sie nach offenen Ports oder aktiven Datenübertragungen?
SpacemanSpiff
@SpacemanSpiff Ich bin nach offenen Häfen suchen
Nenad
Vielleicht eine SNMP-Abfrage? ... nur Ideen für Sie rauswerfen.
SpacemanSpiff

Antworten:

8

Ich weiß nicht, ob lsofes besser ist, aber probieren Sie es aus:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l
ThorstenS
quelle
Eigentlich dauert es 5 Sekunden, aber ich habe 20'000 Verbindungen und zähle :-) werden Sie wissen lassen, wie lange nach dem Pass 100K
Nenad
Update: Ich habe einige Probleme mit unseren Kometen-Clients, aber lsof ist 10 Sekunden lang für 30'000 Verbindungen viel schneller. Wird aktualisiert, nachdem ich die Kometenprobleme behoben habe und über 100.000 Verbindungen überprüfen konnte
Nenad
Update: 15 Sekunden, um 130'000 Verbindungen anzuzeigen - danke! Dies erledigt für mich die Aufgabe, für eine detailliertere Lösung ein Netzwerkanalysator zu verwenden.
Nenad
Wunder voll! Sie können auch den Schalter verwenden -t- vielleicht gibt Ihnen dies auch einen kleinen Schub.
ThorstenS
5

Wenn Sie nur die Verbindungsstatistik anzeigen möchten, versuchen Sie es mit dem ssDienstprogramm aus der iprouteSuite:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

Sie können auch detaillierte Informationen zu allen hergestellten Verbindungen wie folgt anzeigen:

ss -n state established

… Oder nur SSH-Verbindungen:

ss -n state established '( dport = :ssh or sport = :ssh )'

Einige Zahlen am Ende dieser Seite könnten Sie ebenfalls interessieren.

Artyom
quelle
+1 für die Nichtverwendung des veralteten Netzes
Joshua Griffiths
Ich weiß, dass dies von vor 6 Jahren ist, aber haben Sie oder jemand anderes einen Link zu etwas, das die Ausgabe des SS-Status aufschlüsselt. Ich bin besonders neugierig auf die Anzahl der Ports am Ende der TCP-Leitung. Ich mache einige Vergleichstests zwischen zwei Servern, die als Load Balancer fungieren, und auf einem liegt die Portanzahl bei 1000 und auf dem anderen immer bei 0. Was genau zählt das?
RobertRSeattle
1
@RobertRSeattle von SS-Quellcode Es scheint, dass diese Nummer aus der tcp_bind_bucketZeile der /proc/slabinfoDatei gelesen wird . Möglicherweise möchten Sie die Ausgabe awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfozwischen zwei Ihrer Server vergleichen. Weitere Details finden Sie wahrscheinlich irgendwo in Kernelquellen.
Artyom
1

Eine andere Möglichkeit wäre, /proc/net/tcpdirekt zu lesen . Um alle hergestellten TCP-Verbindungen auf 8080 zu sehen, würden Sie so etwas tun

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Wenn Sie dies in einem einzigen Prozess (weniger E / A-Overhead) tun und Eckfälle bearbeiten möchten, erfahren Sie im Folgenden, wie viele ESTABLISHED TCP-Verbindungen über den lokalen Port 8080 verfügen:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Wenn die Software auf Ihrem Computer, die 8080 abhört, IPv6-Unterstützung bietet, müssen Sie /proc/net/tcp6auch lesen . Wenn das Programm IPv6-Sockets verwendet, werden dort Verbindungen angezeigt, auch wenn IPv4 verwendet wird.

jon
quelle
0

einfacher ist

#netstat -at | wc -l

Es wird die Anzahl der TCP-Verbindungen auf dem System angezeigt ...

user162048
quelle
Dies dauert länger, da Sie nicht das Flag "n" verwenden, um zu verhindern, dass alle Hostnamen nachgeschlagen werden. Es werden auch andere Dinge als die Port 8080-Verbindungen angezeigt, um die es in der Frage ging.
Jenny D