Wie überprüfe ich, wie viele HTTP-Verbindungen derzeit geöffnet sind? [geschlossen]

7

Ich möchte wissen, wie viele Personen mit meinem Server verbunden sind. Da ich Kometenanwendungen mache, ist dies wichtig

Alex
quelle
3
Was für ein Server? Welches Betriebssystem? Wenn es ein Webserver ist, welcher? Ihre Auswahl an Tags hilft überhaupt nicht.
John Gardeniers
Beachten Sie, dass HTTP normalerweise keine Verbindungen unterhält. Daher stellen Benutzer nur vorübergehend eine Verbindung her, um eine Webseite abzurufen, und trennen sie dann sofort. Wenn Sie sich nur offene Verbindungen ansehen, erhalten Sie nicht die Anzahl der Personen, die Ihre Website anzeigen.
Chris S

Antworten:

25

Es gibt ungefähr zig Möglichkeiten, dies zu tun, aber:

netstat | grep http | wc -l

Beachten Sie, dass http ein zustandsloses Protokoll ist. Jede Zeile kann einen Client darstellen, der mehrere Sockets öffnet, um verschiedene Dateien (CSS, Bilder usw.) abzurufen, die in einem Wartezustand für eine Weile hängen bleiben.

David
quelle
13
grep -c spart eine Gabel. :)
HampusLi
5

Im Folgenden finden Sie einige Befehle von netstat, mit denen Sie die Anzahl der Verbindungen eines Servers überprüfen können.

Um alle aktiven Internetverbindungen zu den Servern anzuzeigen, sind nur hergestellte Verbindungen enthalten.

netstat -na

Um nur aktive Internetverbindungen zum Server an Port 80 anzuzeigen und die Ergebnisse zu sortieren, müssen Sie viele Verbindungen erkennen, die von einer IP stammen

netstat -an | grep :80 | sort

Anzeigen der Liste aller beteiligten IP-Adressen, anstatt nur zu zählen.

netstat -n -p | grep SYN_REC | sort -u
Stephen Lembert
quelle
3

Ich weiß, dass dies eine alte Frage ist, aber ich habe sie gefunden, als ich nach einer ordentlichen Methode gesucht habe, um alle eingehenden Verbindungen zu einem bestimmten Port zu zählen. Das Problem bei einer umfassenden Suche nach einem Port besteht darin, dass Sie auch ausgehende Verbindungen aufnehmen und Ihre Nummern verzerren.

Z.B:

tcp        0      0 10.224.38.158:8080          10.225.239.6:38194          ESTABLISHED
tcp        0      0 10.224.38.158:8080          10.225.239.6:56825          ESTABLISHED
tcp        0      0 10.224.38.158:51512         10.226.194.28:8080          ESTABLISHED
tcp        0      0 10.224.38.158:51960         10.226.194.28:8080          TIME_WAIT
tcp        0      0 10.224.38.158:46937         10.226.194.28:8080          ESTABLISHED
tcp        0      0 10.224.38.158:51331         10.226.194.28:8080          TIME_WAIT
tcp        0      0 10.224.38.158:8080          10.225.239.6:29634          ESTABLISHED

Ein wahlloses grep -c oder awk | wc -l würde "7" zurückgeben, aber es gibt tatsächlich nur "3" eingehende Verbindungen. Wie auch immer, ich habe keinen würdevollen Weg gefunden, dies zu tun, und mein awk-fu ist es nicht, aber ich habe mich letztendlich für netstat -an entschieden, awk zu verwenden, um nur die Spalte "lokale Adresse" zu drucken und die Instanzen des zu zählen Hafen, den ich suche.

netstat -an | grep -c 8080

AUSGABE: 91

netstat -an | awk '{print $4}' | grep -c 8080

AUSGABE: 31

Also 31 angeschlossene Sockets an Port 8080. Ich hoffe das hilft. Wenn jemand eine präzisere Methode kennt, teilen Sie diese bitte mit.

Niall
quelle
3
Wann immer Sie verwenden awkund grepin schneller Folge, besteht die Möglichkeit, dass awkallein die Arbeit erledigt wird. netstat -an | awk '$5 ~ /:8080$/ { C++ } END { print C }'
200_erfolg