Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

WBOY
WBOYnach vorne
2023-05-16 21:43:271386Durchsuche

Optimierung im Nginx-Befehl (Konfigurationsdatei)

Code kopieren Der Code lautet wie folgt:

worker_processes 8;

  Es wird empfohlen, die Anzahl der Nginx-Prozesse entsprechend der Anzahl der CPUs anzugeben, normalerweise ein Vielfaches davon .

Code kopieren Der Code lautet wie folgt:

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

CPU zuweisen Ordnen Sie jedem Prozess im obigen Beispiel 8 Prozesse 8 CPUs zu. Natürlich können Sie mehrere schreiben oder einen zuweisen Prozesse werden mehreren CPUs zugeordnet.

Code kopieren Der Code lautet wie folgt:

worker_rlimit_nofile 102400;

Dieser 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 (ulimit -n) sein nach der Anzahl der Nginx-Prozesse. Da Nginx die Anforderungen jedoch nicht so gleichmäßig verteilt, ist es am besten, sie mit dem Wert von ulimit -n konsistent zu halten.

Code kopieren Der Code lautet wie folgt:

Epoll verwenden;

Das E/A-Modell von Epoll verwenden, ist selbstverständlich.

Code kopieren Der Code lautet wie folgt:

worker_connections 102400;

 Die maximal zulässige Anzahl von Verbindungen pro Prozess beträgt worker_processes*worker_connections.

Code kopieren Der Code lautet wie folgt:

keepalive_timeout 60;

 keepalive-Timeout.

Code kopieren Der Code lautet wie folgt:

client_header_buffer_size 4k;

 Die Puffergröße des Client-Anforderungsheaders kann entsprechend der Paging-Größe Ihres Systems festgelegt werden. Aufgrund des allgemeinen System-Pagings muss das Paging jedoch größer als 1 KB sein, daher wird die Paging-Größe hier festgelegt. Die Paging-Größe kann mit dem Befehl getconf pagesize ermittelt werden.

Code kopieren Der Code lautet wie folgt:

open_file_cache max=102400 inactive=20s;

Dies gibt den Cache für geöffnete Dateien an. Er ist standardmäßig nicht aktiviert. Es wird empfohlen, ihn zu verwenden Im Einklang mit der Anzahl der geöffneten Dateien bedeutet „nach“: Gibt an, wie lange es dauert, bis eine Datei zum Löschen des Caches aufgefordert wird.

Code kopieren Der Code lautet wie folgt:

open_file_cache_valid 30s;

 Dies bezieht sich darauf, wie oft die zwischengespeicherten gültigen Informationen überprüft werden sollen.

Code kopieren Der Code lautet wie folgt:

open_file_cache_min_uses 1;

Die Mindestanzahl der Verwendungen der Datei innerhalb der inaktiven Parameterzeit der open_file_cache-Anweisung. Wenn diese Anzahl überschritten wird, ist der Dateideskriptor immer im Cache geöffnet Wenn die Datei wie im obigen Beispiel nicht innerhalb der inaktiven Zeit verwendet wird, wird sie entfernt.

Optimierung der Kernel-Parameter

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_max_tw_buckets = 6000

 Die Anzahl der Wartezeiten, der Standardwert ist 180000.

Code kopieren Der Code lautet wie folgt:

net.ipv4.ip_local_port_range = 1024 65000

 Der Bereich der Ports, die vom System geöffnet werden dürfen.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_tw_recycle = 1

 Aktivieren Sie Timewait, schnelles Recycling.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_tw_reuse = 1

 Aktivieren Sie die Wiederverwendung. Ermöglichen Sie die Wiederverwendung von Time-Warte-Sockets für neue TCP-Verbindungen.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_syncookies = 1

  Aktivieren Sie Syn-Cookies, wenn die Syn-Warteschlange überläuft, und aktivieren Sie Cookies, um damit umzugehen.

Code kopieren Der Code lautet wie folgt:

net.core.somaxconn = 262144

Der Rückstand der Listen-Funktion in der Webanwendung begrenzt den net.core.somaxconn unserer Kernel-Parameter standardmäßig auf 128, während der Das von nginx definierte ngx_listen_backlog ist standardmäßig auf 511 eingestellt. Daher muss dieser Wert angepasst werden.

Code kopieren Der Code lautet wie folgt:

net.core.netdev_max_backlog = 262144

  Die maximale Anzahl von Datenpaketen, die an die Warteschlange gesendet werden dürfen, wenn jede Netzwerkschnittstelle Datenpakete schneller empfängt, als der Kernel diese Pakete verarbeitet.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_max_orphans = 262144

 Die maximale Anzahl von TCP-Sockets im System, die keinem Benutzerdatei-Handle zugeordnet sind. Wenn diese Zahl überschritten wird, wird die verwaiste Verbindung sofort zurückgesetzt und eine Warnmeldung ausgegeben. Diese Grenze dient nur der Verhinderung einfacher DOS-Angriffe. Sie können sich nicht zu sehr darauf verlassen oder diesen Wert künstlich verringern. Sie sollten diesen Wert erhöhen (wenn Sie den Speicher erhöhen).

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_max_syn_backlog = 262144

 Der Maximalwert der aufgezeichneten Verbindungsanfragen, die noch keine Client-Bestätigungsinformationen erhalten haben. Für Systeme mit 128 m Speicher ist der Standardwert 1024 und für Systeme mit kleinem Speicher 128.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_timestamps = 0

  Zeitstempel können das Umbrechen von Sequenznummern vermeiden. Bei einer 1-Gbit/s-Verbindung werden Sie auf jeden Fall auf Sequenznummern stoßen, die bereits zuvor verwendet wurden. Der Zeitstempel ermöglicht es dem Kernel, solche „abnormalen“ Pakete zu akzeptieren. Es muss hier ausgeschaltet werden.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_synack_retries = 1

 Um die Verbindung zum Peer zu öffnen, muss der Kernel eine Syn senden und eine Bestätigung als Antwort auf die vorherige Syn einschließen. Dies ist der zweite Handschlag beim sogenannten Drei-Wege-Handschlag. Diese Einstellung bestimmt die Anzahl der Syn+ack-Pakete, die der Kernel sendet, bevor die Verbindung aufgegeben wird.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_syn_retries = 1

 Die Anzahl der gesendeten Syn-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_fin_timeout = 1

 Wenn der Socket vom lokalen Ende geschlossen werden soll, bestimmt dieser Parameter, wie lange er im Fin-Wait-2-Zustand bleibt. Der Peer kann Fehler machen und die Verbindung niemals schließen oder sogar unerwartet abstürzen. Der Standardwert beträgt 60 Sekunden. Der übliche Wert für den 2.2-Kernel beträgt 180 Sekunden. Sie können diese Einstellung drücken, aber bedenken Sie, dass selbst wenn Ihr Rechner ein leicht ausgelasteter Webserver ist, aufgrund einer großen Anzahl toter Sockets die Gefahr eines Speicherüberlaufs besteht. wait-2 ist weniger gefährlich als fin-wait-1, da es nur bis zu 1,5 KB Speicher beanspruchen kann, aber ihre Lebensdauer ist länger.

Code kopieren Der Code lautet wie folgt:

net.ipv4.tcp_keepalive_time = 30

  Wenn Keepalive aktiviert ist, die Häufigkeit, mit der TCP Keepalive-Nachrichten sendet. Der Standardwert beträgt 2 Stunden.

Eine vollständige Kernel-Optimierungskonfiguration

Code kopieren Der Code lautet wie folgt:

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
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax =. 68719476736
kernel.shmall = 429496 7296
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 =. 409 6 16384 4194304
net.core = 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_ Waisen = 32768 00
net.ipv4 .tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle =.1
net.ipv4.tc p_tw_reuse = 1
net.ipv4.tc p_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

Eine einfache Ginx-Optimierungskonfigurationsdatei

Code kopieren Der Code lautet wie folgt:

Benutzer www www;
work er_processes 8 ;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log /www/log/nginx_error.log crit;
pid / usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;

events
{
use epoll;
worker_connections 204800;
}

http
{
include mime.types;
default_type application/octet-stream;

charset utf-8;

server_names_hash_bucket_size. 128 ;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;

sendfile on;
tcp_nopush on;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2
keys_zone=test:10m
inaktiv=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
fastcgi_temp_file_write_size 16k;
fastcgi_cache test;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid beliebig 1m;
fastcgi_cache_min_uses 1 ;
fastcgi_cache_use_stale Fehler-Timeout invalid_header http_500;

open_file_cache max=204800 inaktiv=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;



tcp_nodelay on;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0 ;
gzip_comp_level 2;
gzip_types text /plain application/x-javascript text/css application/xml;
gzip_vary on;


server
{
listen 8080;
server_name ad.test.com;
index index.php index .htm;
root /www/ html/;

location /status
{
stub_status on;
}

location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi. conf;
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}

log_format access ' $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 access;
}
}

Ein paar Dinge zum Fastcgi-Befehl

Code kopieren Der Code lautet wie folgt:

fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2keys_zone=test:10m inactive=5m;

Dieser Befehl spezifiziert a Pfad, Verzeichnisstrukturebene und Schlüsselwort für die Speicherzeit der FastCGI-Cache-Zone und Löschzeit bei Inaktivität.

Code kopieren Der Code lautet wie folgt:

fastcgi_connect_timeout 300;

Geben Sie das Timeout für die Verbindung zum Backend-Fastcgi an.

Code kopieren Der Code lautet wie folgt:

fastcgi_send_timeout 300;

 Timeout für das Senden von Anfragen an fastcgi Dieser Wert bezieht sich auf das Timeout für das Senden von Anfragen an fastcgi, nachdem zwei Handshakes abgeschlossen wurden.

Code kopieren Der Code lautet wie folgt:

fastcgi_read_timeout 300;

  Der Timeout für den Empfang von Fastcgi-Antworten, nachdem zwei Handshakes abgeschlossen wurden.

Code kopieren Der Code lautet wie folgt:

fastcgi_buffer_size 16k; Geben Sie an, wie groß ein Puffer sein soll, um den ersten Teil der fastcgi-Antwort zu lesen Die obige Anweisung gibt an, dass 1 16-KB-Puffer zum Lesen des ersten Teils der Antwort verwendet wird, d Wenn Sie den Puffer im Befehl fastcgi_buffers verwenden, wird auch eine von fastcgi_buffers angegebene Puffergröße für die Zwischenspeicherung zugewiesen.

Code kopieren Der Code lautet wie folgt:

fastcgi_buffers 16 16k;

Geben Sie an, wie viele und wie große Puffer lokal benötigt werden, um Fastcgi-Antworten zu puffern, wie oben gezeigt, wenn die von einem PHP-Skript generierte Seitengröße 256 KB beträgt Wenn es größer als 256 KB ist, werden 16 KB-Puffer im von fastcgi_temp angegebenen Pfad zwischengespeichert. Dies ist natürlich eine unkluge Lösung für die Serverlast Die Verarbeitungsgeschwindigkeit im Speicher ist höher. Für die Festplatte sollte dieser Wert normalerweise auf einen Zwischenwert der von den PHP-Skripten in Ihrer Site generierten Seitengröße eingestellt werden 256 KB beträgt, können Sie diesen Wert auf 16 16 KB oder 4 64 KB oder 64 4 KB festlegen. Die beiden letzteren sind jedoch offensichtlich keine guten Einstellungsmethoden, denn wenn die generierte Seite nur 32 KB groß ist und 4 64 KB verwendet werden, werden 64 KB zugewiesen Puffer zum Zwischenspeichern, und wenn 64 KB verwendet werden, werden 8 4-KB-Puffer zum Zwischenspeichern zugewiesen, und wenn Sie 16 16 KB verwenden, werden 2 16-KB-Puffer zum Zwischenspeichern der Seite zugewiesen, was sinnvoller erscheint.

Code kopieren Der Code lautet wie folgt:

fastcgi_busy_buffers_size 32k;

Ich weiß nicht, wofür dieser Befehl verwendet wird, ich weiß nur, dass der Standardwert doppelt so groß ist wie fastcgi_buffers.

Code kopieren Der Code lautet wie folgt:

fastcgi_temp_file_write_size 32k;

 Welche Größe des Datenblocks wird beim Schreiben von fastcgi_temp_path verwendet? Der Standardwert ist doppelt so groß wie fastcgi_buffers.

Code kopieren Der Code lautet wie folgt:

fastcgi_cache test

 Schalten Sie den Fastcgi-Cache ein und geben Sie ihm einen Namen. Persönlich halte ich das Einschalten des Caches für sehr nützlich, da es die CPU-Last effektiv reduzieren und 502-Fehler verhindern kann. Dieser Cache verursacht jedoch viele Probleme, da er dynamische Seiten zwischenspeichert. Der konkrete Einsatz richtet sich nach Ihren eigenen Bedürfnissen.

Code kopieren Der Code lautet wie folgt:

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

Geben Sie die Cache-Zeit für den angegebenen Antwortcode an, wie im obigen Beispiel, Cache 200, 302 Antworten für eine Stunde, 30 1Antwortcache 1 Tag, sonst 1 Minute.

Code kopieren Der Code lautet wie folgt:

fastcgi_cache_min_uses 1;

  Die minimale Anzahl der Verwendungen des Caches innerhalb des inaktiven Parameterwerts der fastcgi_cache_path-Direktive, wenn eine Datei nicht einmal verwendet wurde Nach ca. 5 Minuten wird diese Datei entfernt.

Code kopieren Der Code lautet wie folgt:

fastcgi_cache_use_stale error timeout invalid_header http_500;

Ich kenne die Funktion dieses Parameters nicht. Ich denke, er sollte Nginx darüber informieren, welche Cache-Typen nutzlos sind. Die oben genannten Parameter beziehen sich auf fastcgi in nginx. Darüber hinaus gibt es auch einige Konfigurationen, die optimiert werden müssen. Wenn Sie php-fpm zum Verwalten von fastcgi verwenden, können Sie die folgenden Werte in der Konfigurationsdatei ändern

Kopieren Sie den Code. Der Code lautet wie folgt:

60

 Die Anzahl der gleichzeitig verarbeiteten Anfragen, d. h. es werden bis zu 60 Sub geöffnet -threads zur Verarbeitung gleichzeitiger Verbindungen.

Code kopieren Der Code lautet wie folgt:

102400

 Maximale Anzahl geöffneter Dateien.

Code kopieren Der Code lautet wie folgt:

204800

 Die maximale Anzahl von Anfragen, die jeder Prozess ausführen kann, bevor er zurückgesetzt wird.

Einige Testergebnisse

 Die statische Seite ist die Testdatei, die im Artikel „Ich habe 4W-Parallelität in Squid konfiguriert“ erwähnt wurde. Das Bild unten zeigt die gleichzeitige Ausführung von Webbench -c 30000 -t 600 auf 6 Maschinen http://ad .test Testergebnisse nach dem Befehl .com:8080/index.html:

Anzahl der mit netstat gefilterten Verbindungen: So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

Ergebnisse der PHP-Seite im Status (die PHP-Seite ruft phpinfo auf): So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

 Die Anzahl der Verbindungen zur PHP-Seite nach der Netstat-Filterung: So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

Serverauslastung vor Verwendung des FastCGI-Cache:

So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

Zu diesem Zeitpunkt ist es bereits etwas schwierig, die PHP-Seite zu öffnen, und zum Öffnen sind mehrere Aktualisierungen erforderlich. Die geringe Belastung von CPU0 in der obigen Abbildung ist darauf zurückzuführen, dass während des Tests alle Netzwerkkarten-Interrupt-Anforderungen CPU0 zugewiesen wurden und 7 Prozesse in Nginx geöffnet und jeweils CPU1-7 zugewiesen wurden.

 Nach der Verwendung des Fastcgi-Cache:

So optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel

 Zu diesem Zeitpunkt können Sie die PHP-Seite problemlos öffnen.

 Dieser Test ist mit keiner Datenbank verbunden, daher hat er keinen Referenzwert. Ich weiß jedoch nicht, ob der obige Test das Limit erreicht hat. Es scheint nicht so, als ob es sich um die Speicher- und CPU-Auslastung handelt, aber es gibt keinen zusätzlichen Wert Maschine für mich zum Laufen.

Das obige ist der detaillierte Inhalt vonSo optimieren Sie die Nginx-Konfiguration und den Nginx-Kernel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen