Erläuterung der Linux-Kernel-Optimierungskonfiguration für hochparallele Nginx-Server

Erläuterung der Linux-Kernel-Optimierungskonfiguration für hochparallele Nginx-Server

Da die Standardparameter des Linux-Kernels auf den gängigsten Szenarien basieren und diese offensichtlich nicht der Definition eines Webservers entsprechen, der viele gleichzeitige Zugriffe unterstützt, müssen Sie die Parameter des Linux-Kernels ä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.

Die folgenden Linux-Systemkernel-Optimierungskonfigurationen wurden von Online-Geschäftssystemen getestet und die Server mit etwa 100.000 gleichzeitigen Verbindungen laufen gut. Es hat einige Zeit gedauert, sie zu organisieren, und jetzt möchte ich sie mit Ihnen teilen. Wenn ein Experte Probleme mit der Konfiguration sieht, weisen Sie ihn bitte darauf hin!

# Steuert die Verwendung von TCP-Syncookies

# zeigt an, dass die Wiederverwendung aktiviert ist. Erlaubt die Wiederverwendung von TIME-WAIT-Sockets für neue TCP-Verbindungen. Der Standardwert ist 0, was geschlossen bedeutet.
net.ipv4.tcp_syncookies = 1

#Ein Boolesches Flag, das das Verhalten des Kernels bei vielen Verbindungsanforderungen steuert. Wenn aktiviert, sendet der Kernel proaktiv RST-Pakete, wenn der Dienst überlastet ist.
net.ipv4.tcp_abort_on_overflow = 1

#Gibt die maximale Anzahl von TIME_WAITs an, die das System gleichzeitig verwalten kann. Wenn diese Zahl überschritten wird, wird TIME_WAIT sofort gelöscht und eine Warnmeldung ausgegeben.
#Der Standardwert ist 180000, ändern Sie ihn auf 6000. Für Server wie Apache und Nginx kann dieser Parameter die maximale Anzahl von TIME_WAIT steuern. Der Server wird durch eine große Anzahl von TIME_WAIT verlangsamt net.ipv4.tcp_max_tw_buckets = 6000

#Selektive Antwort net.ipv4.tcp_sack = 1

#Diese Datei gibt an, ob die gleitende Fenstergröße der TCP/IP-Sitzung variabel ist. Der Parameterwert ist ein Boolescher Wert. 1 bedeutet, dass er veränderbar ist, und 0 bedeutet, dass er unveränderlich ist. TCP/IP verwendet normalerweise eine maximale Fenstergröße von 65535 Bytes, die für Hochgeschwindigkeitsnetzwerke geeignet ist.
#Dieser Wert ist möglicherweise zu klein. Wenn diese Funktion aktiviert ist, kann die TCP/IP-Gleitfenstergröße um mehrere Größenordnungen erhöht werden, wodurch die Datenübertragungskapazität verbessert wird.
net.ipv4.tcp_window_scaling = 1

#TCP-Empfangspuffer net.ipv4.tcp_rmem = 4096 87380 4194304

#TCP Sendepuffer net.ipv4.tcp_wmem = 4096 66384 4194304

# # Nicht genügend Socket-Speicher
net.ipv4.tcp_mem = 94500000 915000000 927000000

#Diese Datei gibt die maximal zulässige Puffergröße für jeden Socket an.
net.core.optmem_max = 81920

#Diese Datei gibt den Standardwert (in Bytes) für die Sende-Socket-Puffergröße an.
net.core.wmem_default = 8388608

#Gibt die maximale Sende-Socket-Puffergröße (in Bytes) an.
net.core.wmem_max = 16777216

#Gibt den Standardwert (in Bytes) für die Größe des Empfangs-Socket-Puffers an.
net.core.rmem_default = 8388608

#Gibt die maximale Größe des Empfangs-Socket-Puffers an (in Bytes).
net.core.rmem_max = 16777216

#Gibt die Länge der SYN-Warteschlange an, der Standardwert ist 1024. Durch Erhöhen der Warteschlangenlänge auf 10200000 können mehr Netzwerkverbindungen aufgenommen werden, die auf eine Verbindung warten.

net.ipv4.tcp_max_syn_backlog = 1020000

#Die maximale Anzahl von Paketen, die an die Warteschlange gesendet werden dürfen, wenn die Rate, mit der jede Netzwerkschnittstelle Pakete empfängt, schneller ist als die Rate, mit der der Kernel diese Pakete verarbeitet.
net.core.netdev_max_backlog = 862144

#Der Rückstand der Listenfunktion in der Webanwendung begrenzt unseren Kernelparameter net.core.somaxconn standardmäßig auf 128, und das von nginx definierte NGX_LISTEN_BACKLOG beträgt standardmäßig 511, daher muss dieser Wert angepasst werden.
net.core.somaxconn = 262144

#Die maximale Anzahl von TCP-Sockets im System, die keinem Benutzerdatei-Handle zugeordnet sind. Wird diese Zahl überschritten, werden verwaiste Verbindungen sofort zurückgesetzt und eine Warnmeldung ausgegeben.


#Dieses Limit dient nur dazu, einfache DoS-Angriffe zu verhindern. Verlassen Sie sich nicht zu sehr darauf und reduzieren Sie diesen Wert nicht künstlich. Erhöhen Sie stattdessen net.ipv4.tcp_max_orphans = 327680

#Zeitstempel kann das Umbrechen von Sequenznummern vermeiden. Bei einer Verbindung mit 1 Gbit/s treten mit Sicherheit bereits verwendete Sequenznummern auf. Der Zeitstempel ermöglicht es dem Kernel, solche „abnormalen“ Pakete zu akzeptieren. Dies muss ausgeschaltet werden.
net.ipv4.tcp_timestamps = 0

#Um eine Verbindung zum anderen Ende zu öffnen, muss der Kernel als Antwort auf das vorherige SYN ein SYN und ein ACK senden. Dies ist der zweite Handshake im sogenannten Drei-Wege-Handshake. Diese Einstellung bestimmt die Anzahl der SYN+ACK-Pakete, die der Kernel sendet, bevor er die Verbindung aufgibt.
net.ipv4.tcp_synack_retries = 1

#Die Anzahl der zu sendenden SYN-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt. www.jb51.net
net.ipv4.tcp_syn_retries = 1

#Zeigt an, dass die schnelle Wiederverwendung von TIME-WAIT-Sockets in TCP-Verbindungen aktiviert wird. Der Standardwert ist 0 und zeigt das Herunterfahren an.
net.ipv4.tcp_tw_recycle = 1

# zeigt an, dass die Wiederverwendung aktiviert ist. Erlaubt die Wiederverwendung von TIME-WAIT-Sockets für neue TCP-Verbindungen. Der Standardwert ist 0, was geschlossen bedeutet.
net.ipv4.tcp_tw_reuse = 1

#Ändern Sie die standardmäßige TIMEOUT-Zeit des Systems.
net.ipv4.tcp_fin_timeout = 15

#Gibt die Häufigkeit an, mit der TCP Keepalive-Nachrichten sendet, wenn Keepalive aktiviert ist. Der Standardwert beträgt 2 Stunden und es wird empfohlen, ihn auf 20 Minuten zu ändern.
net.ipv4.tcp_keepalive_time = 30

# gibt den Portbereich an, der für ausgehende Verbindungen verwendet wird. Der Standardwert ist sehr klein: 32768 bis 61000, ändern Sie ihn auf 10000 bis 65000. (Hinweis: Den Mindestwert nicht zu niedrig einstellen, da sonst evtl. der normale Port belegt wird!)
net.ipv4.ip_local_port_range = 1024 65000

#Das Folgende erfordert möglicherweise das Laden des ip_conntrack-Moduls modprobe ip_conntrack. Einige Dokumente besagen, dass dieses Modul ungültig ist, wenn die Firewall eingeschaltet ist. #Verkürzen Sie das Timeout des etablierten net.netfilter.nf_conntrack_tcp_timeout_established = 180

#CONNTRACK_MAX Die maximal zulässigen Verbindungsverfolgungseinträge, also die „Aufgabe“ (Verbindungsverfolgungseinträge), die Netfilter gleichzeitig im Kernelspeicher verarbeiten kann
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576

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. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Tutorial zur Verwendung von Google-Perftools zur Optimierung der Nginx-Leistung bei hoher Parallelität (Vollversion)
  • So maximieren Sie die Website-Leistung auf einem einzelnen Webserver
  • Eine kurze Diskussion über die Kerneloptimierung mit hoher Parallelität bei Nginx10m+
  • Detaillierte Erläuterung der Nginx-Optimierung in Szenarien mit hoher Parallelität
  • Fassen Sie zusammen, wie Sie die Nginx-Leistung bei hoher Parallelität optimieren können

<<:  Gründe und Lösungen für das Versagen des React-Ereignisdrosselungseffekts

>>:  js realisiert 3D-Soundeffekte durch audioContext

Artikel empfehlen

Bringen Sie Ihnen bei, wie Sie eine Reaktion aus HTML implementieren

Was ist React React ist eine einfache JavaScript-...

Installieren Sie Python 3.6 unter Linux und vermeiden Sie Fallstricke

Installation von Python 3 1. Abhängige Umgebung i...

Anfänger lernen einige HTML-Tags (3)

Anfänger, die mit HTML in Berührung kommen, lerne...

Verstehen Sie die Grundlagen von Navicat für MySQL in einem Artikel

Inhaltsverzeichnis 1. Datenbankbetrieb 2. Datenty...

Eine kurze Erläuterung der Syntax der VUE-Uni-App-Vorlage

1.v-bind (Abkürzung:) Um in Daten definierte Date...

So verwenden Sie das Schreiben von Dateien zum Debuggen einer Linux-Anwendung

Unter Linux ist alles eine Datei, daher besteht d...

Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

Eine Transaktion ist eine logische Gruppe von Ope...

React DVA-Implementierungscode

Inhaltsverzeichnis dva Verwendung von dva Impleme...

Vue: Zwei Komponenten auf gleicher Ebene erreichen eine Wertübertragung

Vue-Komponenten sind verbunden, daher ist es unve...

Warum MySQL die Verwendung von Nullspalten mit Standardwerten nicht empfiehlt

Die Antwort, die Sie oft hören, ist, dass die Ver...

JavaScript implementiert eine verschiebbare Modalbox

In diesem Artikel wird der spezifische JavaScript...

JavaScript-Code zur Implementierung der Weibo-Batch-Unfollow-Funktion

Ein cooler JavaScript-Code, um Weibo-Benutzern st...