Bei täglichen Betriebs- und Wartungsarbeiten werden häufig Nginx-Dienste verwendet und es kommt häufig zu Leistungsengpässen, die durch die hohe Parallelität von Nginx verursacht werden. Heute werde ich kurz auf die Konfiguration der Nginx-Leistungsoptimierung eingehen (basierend nur auf meiner tatsächlichen Erfahrung. Wenn etwas nicht stimmt, weisen Sie mich bitte darauf hin ~) 1. Die Optimierung hier bezieht sich hauptsächlich auf die Konfigurationsoptimierung von nginx. Im Allgemeinen sind die folgenden Elemente bei der Optimierung der nginx-Konfigurationsdatei effektiver: 1) Es wird empfohlen, die Anzahl der Nginx-Prozesse entsprechend der Anzahl der CPUs anzugeben. Normalerweise entspricht diese Anzahl der CPU-Kerne oder ist ein Vielfaches davon. Arbeitsprozesse 8; 2) Weisen Sie jedem Prozess eine CPU zu. Im obigen Beispiel werden 8 Prozesse 8 CPUs zugewiesen. Natürlich können Sie mehr schreiben oder einen Prozess mehreren CPUs zuweisen. worker_cpu_affinity 00000001 00000010 00000100 00001000 000100000 001000000 01000000 10000000; 3) Der folgende Befehl bezieht sich auf die maximale Anzahl von Dateideskriptoren, die von einem nginx-Prozess geöffnet werden. Der theoretische Wert sollte die maximale Anzahl geöffneter Dateien im System (ulimit -n) geteilt durch die Anzahl der nginx-Prozesse sein. nginx verteilt Anfragen jedoch nicht gleichmäßig, daher ist es am besten, den Wert von ulimit -n konsistent zu halten. worker_rlimit_nofile 65535; 4) Verwenden Sie das Epoll-E/A-Modell, um asynchrone Ereignisse effizient zu verarbeiten verwenden Sie epoll; 5) Die maximale Anzahl der für jeden Prozess zulässigen Verbindungen. Theoretisch beträgt die maximale Anzahl der Verbindungen für jeden Nginx-Server worker_processes*worker_connections. Arbeiterverbindungen 65535; 6) Timeout für HTTP-Verbindungen, der Standardwert beträgt 60 s. Die Funktion sorgt dafür, dass die Verbindung vom Client zum Server innerhalb der festgelegten Zeit gültig bleibt. Bei einer nachfolgenden Anforderung an den Server verhindert diese Funktion das Herstellen oder Wiederherstellen der Verbindung. Denken Sie daran, diesen Parameter nicht zu groß einzustellen! Andernfalls belegen viele ungültige HTTP-Verbindungen die Anzahl der Nginx-Verbindungen und Nginx stürzt schließlich ab! KeepAlive-Timeout 60; 7) Die Puffergröße des Client-Anforderungsheaders kann entsprechend der Paging-Größe Ihres Systems eingestellt werden. Im Allgemeinen überschreitet die Header-Größe einer Anforderung 1 KB nicht. Da das System-Paging jedoch im Allgemeinen größer als 1 KB ist, wird es hier auf die Paging-Größe eingestellt. Die Paging-Größe kann mit dem Befehl getconf PAGESIZE ermittelt werden. Client-Header-Puffergröße 4k; 8) Der folgende Parameter gibt den Cache für geöffnete Dateien an. Er ist standardmäßig nicht aktiviert. max gibt die Anzahl der Caches an, die mit der Anzahl der geöffneten Dateien übereinstimmen sollte. inaktiv bezieht sich auf die Zeit, nach der der Cache gelöscht wird, wenn die Datei nicht angefordert wird. open_file_cache max=102400 inaktiv=20s; 9) Im Folgenden wird beschrieben, wie oft nach gültigen Cache-Informationen gesucht werden soll. öffne_Dateicache_gültig 30 s; 10) Die Mindestanzahl, wie oft eine Datei innerhalb der inaktiven Parameterzeit in der Anweisung open_file_cache verwendet wird. Wenn diese Zahl überschritten wird, wird der Dateideskriptor immer im Cache geöffnet. Wie im obigen Beispiel wird eine Datei entfernt, wenn sie innerhalb der inaktiven Zeit nicht einmal verwendet wird. Anzahl der Caches mit offenem Dateicache: 1; 11) Verstecken Sie die Informationen über die Versionsnummer des Betriebssystems und des Webservers (Nginx) im Antwortheader, was der Sicherheit dient. Server-Tokens aus; 12) Lassen Sie sendfile() funktionieren. sendfile() kann Daten (oder zwei beliebige Dateideskriptoren) zwischen der Festplatte und einem TCP-Socket kopieren. Pre-sendfile dient zum Beantragen eines Datenpuffers im Benutzerbereich vor der Datenübertragung. Verwenden Sie dann read(), um die Daten aus der Datei in diesen Puffer zu kopieren, und write(), um die Pufferdaten in das Netzwerk zu schreiben. sendfile() liest Daten sofort von der Festplatte in den Betriebssystem-Cache. Da das Kopieren im Kernel erfolgt, ist sendfile() effizienter als die Kombination von read() und write() und das Ein- und Ausschalten der Verwerfungspufferung (mehr zu sendfile in Kürze). sendfile an; 13) Weisen Sie nginx an, alle Header in einem Paket zu senden, anstatt sie einzeln zu senden. Das heißt, das Datenpaket wird nicht sofort übertragen. Es wird auf einmal übertragen, wenn das Datenpaket am größten ist. Dies hilft, Netzwerküberlastungen zu vermeiden. tcp_nopush ein; 14) Weisen Sie nginx an, die Daten nicht zwischenzuspeichern, sondern sie Stück für Stück zu senden. Wenn Sie Daten rechtzeitig senden müssen, sollten Sie dieses Attribut für die Anwendung festlegen, damit Sie beim Senden kleiner Dateninformationen nicht sofort den Rückgabewert erhalten. tcp_nodelay ein; Zum Beispiel: http { Server-Tokens aus; sendfile an; tcp_nopush ein; tcp_nodelay ein; ...... } 15) Die Puffergröße des Client-Anforderungsheaders kann entsprechend der System-Paging-Größe eingestellt werden. Im Allgemeinen überschreitet die Größe eines Anforderungsheaders 1 KB nicht. Da das System-Paging jedoch im Allgemeinen größer als 1 KB ist, wird es hier auf die Paging-Größe eingestellt. Client-Header-Puffergröße 4k; Die Puffergröße des Client-Anforderungsheaders kann entsprechend der System-Paging-Größe eingestellt werden. Im Allgemeinen überschreitet die Größe eines Anforderungsheaders 1 KB nicht. Da das System-Paging jedoch im Allgemeinen größer als 1 KB ist, wird es hier auf die Paging-Größe eingestellt. [root@test-huanqiu ~]# getconf PAGESIZE 4096 Es gibt jedoch Fälle, in denen die Größe von client_header_buffer_size 4 KB überschreitet. Der Wert von client_header_buffer_size muss jedoch auf ein ganzzahliges Vielfaches der „System-Paging-Größe“ eingestellt werden. 16) Cache für geöffnete Dateien angeben. Standardmäßig ist dies nicht aktiviert. max gibt die Anzahl der Caches an. Es wird empfohlen, bei der Anzahl der geöffneten Dateien konsistent zu sein. inaktiv bezieht sich auf die Zeit, nach der der Cache gelöscht wird, wenn die Datei nicht angefordert wird. open_file_cache max=65535 inaktiv=60s; 17) Die Mindestanzahl, wie oft eine Datei innerhalb der inaktiven Parameterzeit in der Anweisung open_file_cache verwendet wird. Wenn diese Zahl überschritten wird, wird der Dateideskriptor immer im Cache geöffnet. Wie im obigen Beispiel wird eine Datei entfernt, wenn sie innerhalb der inaktiven Zeit nicht einmal verwendet wird. Anzahl der Caches mit offenem Dateicache: 1; 18) Geben Sie an, wie oft die Gültigkeit zwischengespeicherter Informationen überprüft werden soll. öffne_Dateicache_gültig 80 s; Das Folgende ist eine einfache Nginx-Konfigurationsdatei, die ich verwende: [root@dev-huanqiu ~]# cat /usr/local/nginx/conf/nginx.conf Benutzer www www; Arbeitsprozesse 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 000100000 001000000; Fehlerprotokoll /www/log/nginx_error.log kritisch; pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 65535; Veranstaltungen { verwenden Sie epoll; Arbeiterverbindungen 65535; } http { mime.types einschließen; Standardtyp Anwendung/Oktett-Stream; Zeichensatz UTF-8; Servernamen_Hash_Bucket_Größe 128; Client-Header-Puffergröße 2k; große_Client_Header_Puffer 4 4k; maximale Körpergröße des Kunden: 8 m; sendfile an; tcp_nopush ein; KeepAlive-Timeout 60; fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inaktiv=5m; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; fastcgi_busy_buffers_size 16k; fastcgi_temp_file_write_size 16k; fastcgi_cache TEST; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid jede 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale Fehler Timeout invalid_header http_500; open_file_cache max=204800 inaktiv=20s; Anzahl der Caches mit offenem Dateicache: 1; öffne_Dateicache_gültig 30 s; tcp_nodelay ein; gzip an; gzip_min_länge 1k; gzip_puffer 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types Text/einfache Anwendung/x-Javascript-Text/CSS-Anwendung/Xml; gzip_vary ein; Server { hören Sie 8080; Servername huan.wangshibo.com; Index: index.php; index.htm; Wurzel /www/html/; Standort/Status { stub_status ein; } Standort ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fcgi.conf einschließen; } Standort ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { läuft in 30 Tagen ab; } log_format Zugriff '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /www/log/access.log Zugriff; } } 2. Mehrere Anweisungen zu FastCGI 1) Diese Anweisung gibt einen Pfad, eine Verzeichnisstrukturebene, eine Speicherzeit für den Schlüsselbereich und eine inaktive Löschzeit für den FastCGI-Cache an. fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inaktiv=5m; 2) Geben Sie das Timeout für die Verbindung mit dem Backend-FastCGI an. fastcgi_connect_timeout 300; 3) Das Timeout zum Senden einer Anfrage an FastCGI. Dieser Wert bezieht sich auf das Timeout zum Senden einer Anfrage an FastCGI, nachdem zwei Handshakes abgeschlossen wurden. fastcgi_send_timeout 300; 4) Das Timeout für den Empfang von FastCGI-Antworten. Dieser Wert bezieht sich auf das Timeout für den Empfang von FastCGI-Antworten nach Abschluss von zwei Handshakes. fastcgi_read_timeout 300; 5) Geben Sie die Größe des Puffers an, der zum Lesen des ersten Teils der FastCGI-Antwort benötigt wird. Hier können Sie die Puffergröße auf die in der Anweisung fastcgi_buffers angegebene Puffergröße einstellen. Die obige Anweisung gibt an, dass zum Lesen des ersten Teils der Antwort, also des Antwortheaders, ein 16-Kilobyte-Puffer verwendet wird. Tatsächlich ist dieser Antwortheader im Allgemeinen sehr klein (nicht mehr als 1 KB), aber wenn Sie die Puffergröße in der Anweisung fastcgi_buffers angeben, wird auch eine in fastcgi_buffers angegebene Puffergröße zum Zwischenspeichern zugewiesen. fastcgi_buffer_size 16k; 6) Geben Sie an, wie groß der lokale Puffer benötigt wird, um die Reaktion von Fastcgi zu puffern. Diskussion. 64 4K wird verwendet, es wird 8 4K -Puffer für Cache zugewiesen, und wenn 16 16k verwendet wird, wird 2 16K für die Seite der Seite eingestuft, was vernünftiger erscheint. fastcgi_buffers 16 16k; 7) Ich weiß nicht, wofür diese Direktive verwendet wird, ich weiß nur, dass der Standardwert das Doppelte von fastcgi_buffers beträgt. fastcgi_busy_buffers_size 32k; 8) Wie groß der Datenblock beim Schreiben in fastcgi_temp_path sein wird. Der Standardwert ist das Doppelte von fastcgi_buffers. fastcgi_temp_file_write_size 32k; 9) Aktivieren Sie den FastCGI-Cache und weisen Sie ihm einen Namen zu. Ich persönlich halte die Aktivierung des Cache für sehr sinnvoll, da hierdurch die CPU-Auslastung effektiv reduziert und 502-Fehler verhindert werden können. Dieser Cache kann jedoch viele Probleme verursachen, da er dynamische Seiten zwischenspeichert. Der konkrete Einsatzzweck richtet sich nach Ihrem Bedarf. fastcgi_cache TEST 10) Geben Sie eine Cache-Zeit für einen bestimmten Antwortcode an. Im obigen Beispiel werden beispielsweise die Antworten 200 und 302 eine Stunde lang zwischengespeichert, die Antworten 301 einen Tag lang und die anderen eine Minute lang. fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid jede 1m; 11) Die Mindestanzahl, wie oft der Cache innerhalb der inaktiven Parameterwertzeit der Anweisung fastcgi_cache_path verwendet wird. Wenn eine Datei beispielsweise nicht innerhalb von 5 Minuten verwendet wird, wird sie entfernt. fastcgi_cache_min_uses 1; 12) Ich kenne die Funktion dieses Parameters nicht, aber ich vermute, er sollte nginx mitteilen, welche Cache-Typen unbrauchbar sind. fastcgi_cache_use_stale Fehler Timeout invalid_header http_500; Oben sind die FastCGI-bezogenen Parameter in nginx. Darüber hinaus verfügt FastCGI selbst über einige Konfigurationen, die optimiert werden müssen. Wenn Sie FastCGI mit php-fpm verwalten, können Sie die folgenden Werte in der Konfigurationsdatei ändern: 1) Die Anzahl der gleichzeitig verarbeiteten Anforderungen, d. h. es werden bis zu 60 untergeordnete Threads geöffnet, um gleichzeitige Verbindungen zu verarbeiten. <Wertname="max_Kinder">60</Wert> 2) Maximale Anzahl geöffneter Dateien. <Wertname="rlimit_files">65535</Wert> 3) Die maximale Anzahl von Anfragen, die jeder Prozess ausführen kann, bevor er zurückgesetzt wird. <Wertname="max_Anfragen">65535</Wert> 3. Optimierung der Kernel-Parameter in der Datei /etc/sysctl.conf 1) Die Anzahl der Wartezeiten, der Standardwert ist 180000. (Deven: Wenn Sie also die Wartezeit reduzieren möchten, müssen Sie den Wert von tcp_max_tw_buckets reduzieren.) net.ipv4.tcp_max_tw_buckets = 6000 2) Der Portbereich, den das System öffnen darf. net.ipv4.ip_local_port_range = 1024 65000 3) Aktivieren Sie die schnelle Recyclingfunktion von Sockets im TIME-WAIT-Status. Wird verwendet, um die Anzahl der TCP-Verbindungen im TIME-WAIT-Status schnell zu reduzieren. 1 bedeutet aktiviert; 0 bedeutet deaktiviert. Beachten Sie jedoch, dass es im Allgemeinen nicht empfohlen wird, diese Option zu aktivieren, da sie in NAT-Netzwerken (Network Address Translation) zu einer großen Anzahl von Fehlern beim TCP-Verbindungsaufbau und somit zu Fehlern beim Websitezugriff führt. net.ipv4.tcp_tw_recycle = 0 Tatsächlich muss die Funktion net.ipv4.tcp_tw_recycle aktiviert werden, nachdem der Schalter net.ipv4.tcp_timestamps aktiviert wurde (normalerweise aktiviert das System diese Funktion standardmäßig). Wenn tcp_tw_recycle aktiviert ist (gleichzeitig wird tcp_timestamps aktiviert, wodurch der Effekt des schnellen Socket-Recyclings erzielt wird), ist dies für den Client hinter dem NAT-Gerät eine Katastrophe! Dies führt dazu, dass die Clientverbindung zum Server hinter dem NAT-Gerät instabil ist (einige Clients können eine Verbindung zum Server herstellen, andere nicht). Der Grund für das Recycling eines Sockets im Status TIME_WAIT liegt im Allgemeinen darin, dass er „keine aktive Verbindung zum Remote-Ende herstellen kann“, da keine Ports verfügbar sind. Außerdem sollte er nicht zum Recycling von Speicher dienen (was unnötig ist). Das heißt: Die Anforderung ist die Anforderung des Clients. Wird der Server das Problem „nicht genügend Ports“ haben? Sofern es sich nicht um eine Front-End-Maschine handelt, benötigt sie viele Verbindungen zu den Back-End-Diensten, d. h. sie spielt die Rolle eines Clients. Die richtige Lösung für dieses Problem sollte immer sein: net.ipv4.ip_local_port_range = 9000 6553 #Der Standardwert ist klein net.ipv4.tcp_max_tw_buckets = 10000 #Der Standardwert ist klein und kann entsprechend angepasst werden net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 10 4) Aktivieren Sie die Wiederverwendungsfunktion, um die Wiederverwendung von Sockets im Status TIME-WAIT für neue TCP-Verbindungen zu ermöglichen. Das Aktivieren dieser Funktion ist sicher, ändern Sie sie also grundsätzlich nicht! net.ipv4.tcp_tw_reuse = 1 5) Aktivieren Sie SYN-Cookies. Wenn die SYN-Warteschlange überläuft, aktivieren Sie Cookies, um das Problem zu lösen. net.ipv4.tcp_syncookies = 1 6) Der Rückstand der Listenfunktion in der Webanwendung begrenzt unseren Kernelparameter net.core.somaxconn standardmäßig auf 128, und der von nginx definierte Standardwert von NGX_LISTEN_BACKLOG ist 511, daher muss dieser Wert angepasst werden. net.core.somaxconn = 262144 7) 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 sie verarbeiten kann. 8) Wie hoch ist 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. Diese Begrenzung dient lediglich der Verhinderung einfacher DoS-Angriffe. Verlassen Sie sich nicht zu sehr darauf und verringern Sie diesen Wert nicht künstlich. Stattdessen sollten Sie diesen Wert erhöhen (wenn Sie den Speicher vergrößern). net.ipv4.tcp_max_orphans = 262144 9) Die maximale Anzahl aufgezeichneter Verbindungsanforderungen, für die noch keine Client-Bestätigung eingegangen ist. Bei Systemen mit 128 MB Speicher beträgt der Standardwert 1024, bei Systemen mit weniger Speicher 128. net.ipv4.tcp_max_syn_backlog = 262144 10) Zeitstempel können das Umbrechen von Sequenznummern verhindern. Bei einer 1-Gbit/s-Verbindung werden mit Sicherheit schon einmal verwendete Sequenznummern verwendet. Der Zeitstempel ermöglicht es dem Kernel, solche „abnormalen“ Pakete zu akzeptieren. net.ipv4.tcp_timestamps = 1 Um die Leistung zu verbessern, aktivieren viele Server die Option net.ipv4.tcp_tw_recycle. In einer NAT-Netzwerkumgebung kann dies zu Verbindungsfehlern beim Websitezugriff führen. Persönliche Beratung: Deaktivieren Sie die Option net.ipv4.tcp_tw_recycle anstelle von net.ipv4.tcp_timestamps. Denn wenn net.ipv4.tcp_timestamps ausgeschaltet ist, funktioniert das Einschalten von net.ipv4.tcp_tw_recycle nicht; net.ipv4.tcp_timestamps kann jedoch unabhängig davon eingeschaltet werden und funktioniert. 11) Um die 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 12) Die Anzahl der gesendeten SYN-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt. net.ipv4.tcp_syn_retries = 1 13) Wenn der Socket vom lokalen Ende geschlossen wird, bestimmt dieser Parameter, wie lange er im Zustand FIN-WAIT-2 bleibt. Dem Peer können Fehler unterlaufen und die Verbindung nie schließen oder sogar unerwartet abstürzen. Der Standardwert beträgt 60 Sekunden. Der übliche Wert für 2.2-Kernel beträgt 180 Sekunden. Sie können ihn auf diese Weise einstellen, aber denken Sie daran, dass selbst wenn Ihr Rechner ein leicht ausgelasteter Webserver ist, aufgrund einer großen Anzahl toter Sockets die Gefahr eines Speicherüberlaufs besteht. FIN-WAIT-2 ist weniger gefährlich als FIN-WAIT-1, da es nur bis zu 1,5 KB Speicher verbrauchen kann, aber seine Lebensdauer ist länger. net.ipv4.tcp_fin_timeout = 30 14) Wenn Keepalive aktiviert ist, die Häufigkeit, mit der TCP Keepalive-Nachrichten sendet. Der Standardwert ist 2 Stunden. net.ipv4.tcp_keepalive_time = 30 Unten finden Sie eine Standardkonfiguration von Kernelparametern, die ich häufig verwende. [root@dev-huanqiu ~]# cat /etc/sysctl.conf net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 //Diese vier rot markierten Zeilen sind in der Regel die Lösung, wenn sehr viele TIME_WAIT gefunden werden kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 1 //Wenn net.ipv4.tcp_tw_recycle auf 1 gesetzt ist, wird diese Option am besten mit net.ipv4.tcp_synack_retries = 1 kombiniert net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 // Das Aktivieren dieser Funktion kann den TIME-WAIT-Status reduzieren, kann jedoch im NAT-Netzwerkmodus zu TCP-Verbindungsfehlern führen. Seien Sie also vorsichtig. net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.ip_conntrack_max = 6553500 -------------------------------------Bericht über einen kleinen Unfall---------------------------------------- net.ipv4.tcp_tw_recycle = 1 Nachdem diese Funktion aktiviert wurde, kann sie den TIME-WAIT-Status tatsächlich reduzieren. Normalerweise schalte ich diesen Parameter ein. Aber ich bin auch wegen dieses Parameters in eine Falle geraten: Das CMS-Backend-System des Unternehmens zum Veröffentlichen von Nachrichten verwendet die Proxy-Architektur haproxy+keepalived und alle externen IP-Adressen der realen Server im Backend werden entfernt. Phänomen: Während der Hauptposting-Zeit eines Morgens gab es einen Zugriffsfehler im CMS-Backend. Ein Neustart des PHP-Dienstes würde sofort wirksam werden, aber nach einer gewissen Zeit würde der Zugriff erneut fehlschlagen. Ich habe die Nginx- und PHP-Protokolle überprüft, aber nichts gefunden. Später habe ich danach gegoogelt und festgestellt, dass der Parameter net.ipv4.tcp_tw_recycle das Problem verursacht hat! Diese Netzwerkarchitektur befindet sich im NAT-Modus für den Backend-Realserver. Wenn dieser Parameter aktiviert ist, treten viele Fehler beim TCP-Verbindungsaufbau auf, die zu Website-Zugriffsfehlern führen. Setzen Sie abschließend net.ipv4.tcp_tw_recycle auf 0. Nach dem Deaktivieren dieser Funktion wird der Hintergrundzugriff sofort wieder normal. 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:
|
<<: Vue implementiert die Shake-Funktion (kompatibel mit ios13.3 und höher)
>>: Was tun, wenn Sie das ursprüngliche Passwort für MySQL auf dem MAC vergessen?
Inhaltsverzeichnis Auf der offiziellen React-Webs...
In diesem Artikel wird der CSS-Beispielcode vorge...
MySQL-Datenbanken werden häufig verwendet, insbes...
Inhaltsverzeichnis 1. So erhalten Sie unterschied...
Inhaltsverzeichnis Vorwort Erstellungsschritte Er...
Inhaltsverzeichnis Auswirkungen eines vollständig...
#include <asm/io.h> #define ioremap(Cookie,...
Vorwort Dieser Artikel enthält 1. Mehrere wesentl...
Wenn Komponenten detaillierter werden, treten Sit...
Inhaltsverzeichnis Namespaces mit gleichem Namen ...
Bei vielen Benutzern ist dieser Fehler beim Start...
Inhaltsverzeichnis 1. Wo wird der selbstinkrement...
sort Den Inhalt einer Textdatei sortieren Verwend...
Wenn ein Thread eine DELAYED-Anweisung für eine T...
Frage: Der häufig verwendete Befehl "ll"...