Eine kurze Diskussion über die Kerneloptimierung mit hoher Parallelität bei Nginx10m+

Eine kurze Diskussion über die Kerneloptimierung mit hoher Parallelität bei Nginx10m+

Was ist hohe Parallelität?

  • Die standardmäßigen Linux-Kernelparameter sind für die gängigsten Szenarien ausgelegt und nicht für Webserver geeignet, die viele gleichzeitige Zugriffe unterstützen. Daher müssen Sie die Linux-Kernelparameter ändern, um Nginx eine höhere Leistung zu ermöglichen.
  • Bei der Optimierung des Kernels können Sie vieles tun. Normalerweise passen wir ihn jedoch den geschäftlichen Gegebenheiten entsprechend an. Wenn Nginx als statischer Webinhaltsserver, Reverse-Proxy oder Server zur Komprimierung verwendet wird, sind die Kernelparameteranpassungen anders. Hier nehmen wir eine einfache Konfiguration der gängigsten TCP-Netzwerkparameter vor, die es Nginx ermöglichen, mehr gleichzeitige Anfragen zu unterstützen.
  • Dazu ist eine Modifizierung von /etc/sysctl.conf zum Ändern der Kernelparameter erforderlich.

Konfigurationsmethode

Konfigurationsdetails

#Gibt die maximale Anzahl von Handles an, die ein einzelner Prozess öffnen kann;

fs.file-max = 999999

#Wenn der Parameter auf 1 gesetzt wird, bedeutet dies, dass der Socket im Status TIME_WAIT für neue TCP-Verbindungen wiederverwendet werden kann. Dies ist für den Server von großer Bedeutung, da sich immer eine große Anzahl von Links im Status TIME_WAIT befinden.

net.ipv4.tcp_tw_reuse = 1

#Wenn Keepalive aktiviert ist, die Häufigkeit, mit der TCP Keepalive-Nachrichten sendet; der Standardwert beträgt 2 Stunden. Wenn Sie den Wert auf 10 Minuten einstellen, können ungültige Links schneller gelöscht werden.

ner.ipv4.tcp_keepalive_time = 600

#Wenn der Server die Verbindung aktiv schließt, bleibt der Socket für längere Zeit im Status FIN_WAIT_2

net.ipv4.tcp_fin_timeout = 30

#Dieser Parameter gibt die maximale Anzahl von TIME_WAIT-Sockets an, die das Betriebssystem zulässt. Wenn diese Zahl überschritten wird, werden die TIME_WAIT-Sockets sofort gelöscht und eine Warnmeldung ausgegeben.

#Dieser Parameter ist standardmäßig auf 180000 eingestellt. Zu viele TIME_WAIT-Sockets verlangsamen den Webserver.

net.ipv4.tcp_max_tw_buckets = 5000

#Definieren Sie den Wertebereich der lokalen Ports für UDP- und TCP-Links.

net.ipv4.ip_local_port_range = 1024 65000

#Definiert die Minimal-, Standard- und Maximalwerte des TCP-Empfangspuffers.

net.ipv4.tcp_rmem = 10240 87380 12582912

#Definieren Sie die Minimal-, Standard- und Maximalwerte des TCP-Sendepuffers.

net.ipv4.tcp_wmem = 10240 87380 12582912

#Wenn die Geschwindigkeit, mit der die Netzwerkkarte Datenpakete empfängt, höher ist als die Verarbeitungsgeschwindigkeit des Kernels, wird eine Warteschlange zum Speichern dieser Datenpakete eingerichtet. Dieser Parameter stellt den größeren Wert der Warteschlange dar.

net.core.netdev_max_backlog = 8096

#Zeigt an, dass der Kernelsocket die Standardgröße des Puffers akzeptiert.

net.core.rmem_default = 6291456

#Gibt die Standardgröße des Sendepuffers des Kernelsockets an.

net.core.wmem_default = 6291456

#Zeigt an, dass der Akzeptanzpuffer des Kernelsockets größer ist.

net.core.rmem_max = 12582912

#Gibt die maximale Größe des Sendepuffers des Kernelsockets an.

net.core.wmem_max = 12582912

Hinweis: Die oben genannten vier Konfigurationen müssen basierend auf der Geschäftslogik und den tatsächlichen Hardwarekosten umfassend betrachtet werden.

#Nicht leistungsbezogen. Wird verwendet, um den SYN-Angriff von TCP aufzulösen.

net.ipv4.tcp_syncookies = 1

#Dieser Parameter gibt die maximale Länge der SYN-Anforderungswarteschlange an, die während der Einrichtungsphase des TCP-Dreiwege-Handshakes akzeptiert wird. Der Standardwert ist 1024. Wenn Sie den Wert höher einstellen, können Sie verhindern, dass Linux die vom Client initiierte Verbindungsanforderung verliert, wenn Nginx zu beschäftigt ist, um neue Verbindungen anzunehmen.

net.ipv4.tcp_max_syn_backlog = 8192

#Dieser Parameter wird verwendet, um ein schnelles Recycling mit Zeitwartezeit zu aktivieren.

net.ipv4.tcp_tw_recycle = 1

Der Standardwert der Option ist 128. Dieser Parameter wird verwendet, um die Anzahl der vom System gleichzeitig initiierten TCP-Verbindungen anzupassen. Bei Anfragen mit hoher Parallelität kann der Standardwert zu einem Verbindungstimeout oder einer erneuten Übertragung führen. Daher muss dieser Wert in Kombination mit der Anzahl der Anfragen mit hoher Parallelität angepasst werden.

net.core.somaxconn=262114

Mit der Option # wird die maximale Anzahl von TCP-Sockets im System festgelegt, die keinem Benutzerdatei-Handle zugeordnet sind. Wird diese Zahl überschritten, wird der verwaiste Link sofort zurückgesetzt und eine Warnmeldung ausgegeben. Dieser Grenzwert bedeutet, dass Sie sich zur Verhinderung einfacher DOS-Angriffe nicht zu sehr auf diesen Grenzwert verlassen und nicht einmal daran denken sollten, ihn zu verringern. Erhöhen Sie in den meisten Fällen den Wert.

net.ipv4.tcp_max_orphans=262114

Zur Vereinfachung der Verwendung können Sie Folgendes direkt kopieren

net.ipv4.tcp_tw_reuse = 1
fs.file-max = 999999
net.ipv4.tcp_fin_timeout = 30
ner.ipv4.tcp_keepalive_time = 600

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Fassen Sie zusammen, wie Sie die Nginx-Leistung bei hoher Parallelität optimieren können
  • Detaillierte Erläuterung der Nginx-Optimierung in Szenarien mit hoher Parallelität
  • Nginx+Lua+Redis erstellt hochparallele Webanwendungen
  • Ein Beispiel für die Verwendung eines Lvs+Nginx-Clusters zum Erstellen einer Architektur mit hoher Parallelität

<<:  Eine kurze Diskussion über den gesamten Prozess des ersten Renderings von Vue

>>:  Überlegungen zur Partitionierung von MySQL-Datenbanktabellen [empfohlen]

Artikel empfehlen

CentOS 8 offiziell veröffentlicht, basierend auf Red Hat Enterprise Linux 8

Das CentOS-Projekt, ein 100 % kompatibler Neuaufb...

Detaillierte Erläuterung der SSHD-Dienste und Dienstverwaltungsbefehle unter Linux

sshd SSH ist die Abkürzung für Secure Shell, ein ...

Detaillierte Erklärung zur SQL-Injection - Sicherheit (Teil 2)

Sollte dieser Artikel Fehler enthalten oder du An...

Schritte zur Installation von MySQL mit Docker unter Linux

Als Tester müssen Sie während des Lernprozesses h...

jQuery implementiert eine einfache Änderung der Schaltflächenfarbe

Wir möchten in HTML und CSS die Farbe eines Butto...

MySQL-Sortierung zum Abrufen eines Ranking-Beispielcodes

Der Code sieht folgendermaßen aus: SELECT @i:=@i+...

Die Lösung von html2canvas, dass Bilder nicht normal erfasst werden können

Frage Lassen Sie mich zunächst über das Problem s...

Vue.js verarbeitet Icon-Symbole über Komponenten

Icon-Icon-Verarbeitungslösung Das Ziel dieses Dat...

MySQL-Optimierungszusammenfassung – Gesamtzahl der Abfrageeinträge

1. COUNT(*) und COUNT(COL) COUNT(*) führt normale...

MySQL 8.0.12 – Schnellinstallations-Tutorial

Die Installation von MySQL 8.0.12 dauerte zwei Ta...

Beispielcode zur Implementierung des Verlaufs in Vuex

Ich habe vor Kurzem eine visuelle Operationsplatt...

Wie wirkt sich der zusammengesetzte Index von MySQL aus?

Inhaltsverzeichnis Hintergrund Zusammengesetzte I...

Detaillierte Erklärung der CSS-Hintergrund- und Rahmen-Tag-Beispiele

1. CSS-Hintergrund-Tag 1. Stellen Sie die Hinterg...