Wissen Sie, wie viele Verbindungen ein Linux-Server verarbeiten kann?

Wissen Sie, wie viele Verbindungen ein Linux-Server verarbeiten kann?

Vorwort

Sehen wir uns zunächst an, wie eine TCP-Verbindung identifiziert wird. Das System wird durch ein Vierer-Tupel (src_ip, src_port, dst_ip, dst_port) identifiziert, nämlich Quell-IP, Quell-Port, Ziel-IP und Ziel-Port. Beispielsweise haben wir einen Dienst unter 192.168.0.1 mit geöffnetem Port 80. Dann verbinden sich alle Clients mit Port 80 dieses Dienstes. Es besteht ein Missverständnis, dass wir oft sagen, dass eine Maschine 65536 Ports hat, sodass die Anzahl der Verbindungen, die sie überträgt, 65536 beträgt. Diese Aussage ist äußerst falsch und verwechselt den Quellport mit dem Zugriffszielport. Wenn wir Stresstests durchführen, verwenden wir den Stresstest-Client. Die Anzahl der Verbindungen dieses Clients ist durch die Anzahl der Ports begrenzt, aber die Anzahl der Verbindungen auf dem Server kann Zehntausende erreichen, im Allgemeinen bis zu einer Million (4C8G-Konfiguration). Die Obergrenze hängt vom Grad der Optimierung ab. Die einzelnen Schritte sind wie folgt:

Wir führen einen Stresstest für einen Zielserver durch und möchten die Anzahl der Verbindungen unter Last sehen. Wenn wir ihn bis zu einer bestimmten Zahl belasten, meldet die Konsole plötzlich „zu viele offene Dateien“. Dies liegt daran, dass das Linux-System beim Erstellen einer TCP-Verbindung einen Socket-Handle erstellt und jeder Socket-Handle ein Datei-Handle ist. Das Betriebssystem verfügt über eine Begrenzung für die Anzahl geöffneter Dateihandles. Eine der Grundphilosophien von Unix/Linux lautet: „Alles ist eine Datei.“ Um die TCP-Übertragungskapazität zu erhöhen, müssen Sie den Datei-Handle anpassen.

Schritt 1: Ändern des Datei-Handle-Limits

# Zeigen Sie die maximale Anzahl von Dateihandles an, die der aktuelle Benutzer mit TCP ulimit -n öffnen darf

# Datei-Handle ändern vim /etc/security/limits.conf

*weiches Nofile 655350
* hartes Nofile 655350

Verlassen Sie nach der Änderung das Terminalfenster, melden Sie sich erneut an (ein Neustart des Servers ist nicht erforderlich) und Sie können die neuesten Ergebnisse sehen. Dies ist der erste Schritt zur Optimierung, die Änderung des Datei-Handle-Limits.

Beachten:
Soft Nofile (Soft Limit) bedeutet, dass Linux die Anzahl der Dateien, die Benutzer gleichzeitig öffnen können, innerhalb des vom aktuellen System verkraftbaren Rahmens weiter begrenzt.
Hard Nofile (Hard Limit) ist die maximale Anzahl von Dateien, die vom System gleichzeitig geöffnet werden können, berechnet auf Grundlage der Systemhardwareressourcen (hauptsächlich Systemspeicher). Normalerweise ist das Soft Limit kleiner oder gleich dem Hard Limit.

Schritt 2: TCP-Parameter-Tuning

Parameter Standardkonfiguration Konfiguration anpassen veranschaulichen
fs.file-max 1048576 9999999 Die Anzahl der von allen Prozessen geöffneten Dateideskriptoren
fs.nr_open 1635590 1635590 Die maximale Anzahl von Dateien, die von einem einzelnen Prozess zugewiesen werden können
net.core.rmem_default 124928 262144 Standard-TCP-Lesepuffer
net.core.wmem_default 124928 262144 Standard-TCP-Sendepuffer
net.core.rmem_max 124928 8388608 Maximaler TCP-Lesepuffer (Standard)
net.core.wmem_max 124928 8388608 Maximaler TCP-Sendepuffer (Standard)
net.ipv4.tcp_wmem 4096 16384 4194304 4096 16384 8388608 TCP Sendepuffer
net.ipv4.tcp_rmem 4096 87380 4194304 4096 87380 8388608 TCP-Lesepuffer
net.ipv4.tcp_mem 384657 512877 769314 384657 512877 3057792 TCP-Speichergröße
net.core.netdev_max_backlog 1000 5000 Die maximale Anzahl an Paketen, die an die Warteschlange gesendet werden dürfen, wenn die Rate, mit der Pakete an jeder Netzwerkschnittstelle empfangen werden, schneller ist als die Rate, mit der der Kernel sie verarbeiten kann.
net.core.optmem_max 20480 81920 Die maximal zulässige Puffergröße für jeden Socket
net.core.somaxconn 128 2048 Die maximale Länge der Abhörwarteschlange für jeden Port. Dies ist ein globaler Parameter.
net.ipv4.tcp_fin_timeout 60 30 Die Zeit (in Sekunden), die TCP im Zustand FIN-WAIT-2 bleibt, wenn die Socket-Verbindung vom lokalen Ende getrennt wird. Es kann sein, dass die Gegenpartei die Verbindung trennt oder nie beendet, oder dass der Prozess unerwartet beendet wird.
net.core.netdev_max_backlog 1000 10000 Die maximale Anzahl an Paketen, die an die Warteschlange gesendet werden dürfen, wenn die Rate, mit der Pakete an jeder Netzwerkschnittstelle empfangen werden, schneller ist als die Rate, mit der der Kernel sie verarbeiten kann.
net.ipv4.tcp_max_syn_backlog 1024 2048 Die maximale Anzahl von Verbindungsanfragen, die in der Warteschlange gespeichert werden können, aber noch nicht von der Gegenstelle bestätigt wurden. Wenn Ihr Server häufig überlastet ist, versuchen Sie, diese Zahl zu erhöhen.
net.ipv4.tcp_max_tw_buckets 5000 5000 Die maximale Anzahl von Timewait-Sockets, die das System gleichzeitig verarbeiten kann
net.ipv4.tcp_tw_reuse 0 1 Ob die Wiederverwendung von TIME-WAIT-Sockets für neue TCP-Verbindungen erlaubt sein soll
net.ipv4.tcp_keepalive_time 7200 900 Gibt die Anzahl der Sekunden an, nach denen eine TCP-Verbindung mit dem Senden einer Prüfnachricht (Senden einer leeren Nachricht) beginnt, wenn keine Datennachrichtenübertragung stattfindet.
net.ipv4.tcp_keepalive_intvl 75 30 Gibt den Zeitabstand zwischen der vorherigen Erkennungsmeldung und der nächsten Erkennungsmeldung an
net.ipv4.tcp_keepalive_probes 9 3 Gibt die Anzahl der Erkennungen an

Aus den obigen Konfigurationsparametern können wir erkennen, dass im Linux-Kernel Pufferwarteschlangen zum Senden und Empfangen von TCP eingerichtet werden, was den Systemdurchsatz verbessern kann.

Alle oben genannten Parameter sind in der Datei /etc/sysctl.conf definiert. Einige Parameter sind möglicherweise nicht in der Datei definiert. Das System gibt Standardwerte vor. Wenn Sie sie ändern müssen, fügen Sie sie direkt in der Datei hinzu oder ändern Sie sie und führen Sie dann den Befehl sysctl -p aus, damit sie wirksam werden.

Beachten:
Je größer der Parameterwert, desto besser. Einige Parameter müssen basierend auf der Hardwarekonfiguration des Servers und den Auswirkungen der Parameter auf andere Dienste auf dem Server berücksichtigt werden.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Linux-Lastausgleich – Zusammenfassung der Unterschiede zwischen Layer-4-Lastausgleich und Layer-7-Lastausgleich
  • So erstellen Sie einen Nginx-Load-Balancing-Dienst unter Linux
  • Detaillierte Erläuterung der Linux-Systemkonfiguration Nginx Load Balancing
  • Detaillierte Erläuterung der Linux-Dual-Netzwerkkartenbindung zur Erzielung eines Lastenausgleichs
  • So implementieren Sie einen einfachen Lastenausgleich mit DNS unter Linux
  • Detaillierte Erklärung der Linux-CPU-Last und CPU-Auslastung

<<:  Detaillierte Erläuterung zweier Methoden zum Festlegen globaler Variablen und Sitzungsvariablen in MySQL

>>:  8 Möglichkeiten zum manuellen und automatischen Sichern Ihrer MySQL-Datenbank

Artikel empfehlen

Detaillierte Erläuterung der MySQL-Lösung zur USE DB-Überlastung

Wenn wir auf einen Fehler stoßen, denken wir oft ...

Gutes Website-Copywriting und gute Benutzererfahrung

Das Betrachten einer Website ist eigentlich wie di...

MySQL 5.7.17 Installations- und Konfigurations-Tutorial für Mac

1. MySQL herunterladen Klicken Sie auf die Downlo...

Detaillierte Analyse des HTTP-Statuscodes 502 des Dienstes nginx+php-fpm

Bei einem unserer Webprojekte ist aufgrund der Zu...

Vue implementiert das digitale Tausendertrennzeichenformat global

In diesem Artikelbeispiel wird der spezifische Co...

Eclipse konfiguriert Tomcat und Tomcat hat eine ungültige Port-Lösung

Inhaltsverzeichnis 1. Eclipse konfiguriert Tomcat...

JavaScript-HTML zur Implementierung der mobilen Red Envelope Rain-Funktionsseite

In diesem Artikelbeispiel wird der spezifische HT...