ProzessstrukturdiagrammNginx ist eine Multiprozessstruktur. Die Multiprozessstruktur soll eine hohe Verfügbarkeit und Zuverlässigkeit von Nginx gewährleisten, einschließlich:
Hinweis: Der Grund, warum Multiprozess im Vergleich zu Multithreading eine hohe Verfügbarkeit und Zuverlässigkeit gewährleisten kann, besteht darin, dass die Adressräume zwischen den Prozessen unabhängig sind und die Aufgaben zwischen den Prozessen sich nicht gegenseitig beeinflussen. Im Vergleich zu Multithreading verbraucht es mehr CPU-Ressourcen. Da sich mehrere Threads den Adressraum eines Prozesses teilen, wirkt sich der Fehler einer Thread-Aufgabe auf die Aufgaben anderer Threads aus. Angenommen, der Benutzer unseres Nginx-Dienstes ist nginx. Mit dem folgenden Befehl können wir den Masterprozess und den Workerprozess des aktuell ausgeführten Nginx-Dienstes anzeigen. Dabei sehen wir, dass die übergeordnete Prozess-ID der vier Workerprozesse die Prozess-ID des Masters (1325) ist. [root@master ~]# ps -ef | grep nginx | grep -v grep | grep -v php-fpm root 1325 1 0 11:28 ? 00:00:00 nginx: Masterprozess /usr/local/nginx/sbin/nginx nginx 1332 1325 0 11:28 ? 00:00:00 nginx: Arbeitsprozess nginx 1334 1325 0 11:28 ? 00:00:00 nginx: Arbeitsprozess nginx 1335 1325 0 11:28 ? 00:00:00 nginx: Arbeitsprozess nginx 1336 1325 0 11:28 ? 00:00:00 nginx: Arbeitsprozess Wir können unsere Master- und Worker-Prozesse über [root@master ~]# lsof -i:80 BEFEHL PID BENUTZER FD TYP GERÄTEGRÖSSE/AUS KNOTENNAME nginx 1325 root 6u IPv4 22282 0t0 TCP *:http (HÖREN) nginx 1332 nginx 6u IPv4 22282 0t0 TCP *:http (HÖREN) nginx 1334 nginx 6u IPv4 22282 0t0 TCP *:http (HÖREN) nginx 1335 nginx 6u IPv4 22282 0t0 TCP *:http (HÖREN) nginx 1336 nginx 6u IPv4 22282 0t0 TCP *:http (HÖREN) SemaphorverwaltungLinux-Semaphor-Verwaltungsmechanismus Signale sind eine der Kommunikationsmethoden zwischen Prozessen. Eine typische Verwendung ist: Ein Terminalbenutzer gibt einen Interrupt-Befehl ein, um die Ausführung eines Programms über den Signalmechanismus zu stoppen. Wir können unsere Prozesse verwalten, indem wir ihnen Signale senden. Der Befehl Insgesamt gibt es 64 Semaphoren, von denen folgende geklärt werden müssen: kill -1 $PID: (SIGHUP) lädt den Prozess neu. Ein Daemon-Prozess, der vom Terminal getrennt ist, wird mit diesem Signal benachrichtigt, dass die Konfigurationsdatei erneut gelesen werden soll. kill -2 $PID: (SIGINT) unterbrechen (über Strg+C); kill -3 $PID: (SIGQUIT) Beenden der Tastatureingabe (Strg-\); kill -9 $PID: (SIGKILL) beendet den Prozess sofort, unabhängig vom aktuellen Status des Programms; kill -10 $PID: (SIGUSR1) $USR1 und $USR2 sind beide Semaphoren, die für benutzerdefinierte Werte reserviert sind; töten -12 $PID:($IGUSR2) kill -15 $PID: (SIGTERM) stoppt normalerweise einen Prozess; kill -17 $PID: (SIGCHLD) Das Signal für die Kommunikation zwischen übergeordneten und untergeordneten Prozessen. Der übergeordnete Prozess kann viele untergeordnete Prozesse forken. Wenn ein untergeordneter Prozess auflegt, wird ein Signal an den übergeordneten Prozess gesendet. kill kann die angegebenen Informationen an das Programm senden. Die Standardmeldung ist SIGTERM(15), die das angegebene Programm beendet. Wenn dies immer noch nicht funktioniert, können Sie mit der Meldung SIGKILL(9) versuchen, das Programm zwangsweise zu entfernen. Die Programm- oder Jobnummer kann mit dem Befehl „ps“ oder „jobs“ angezeigt werden. kill -l # Alle unterstützten Kill-PID-Signale anzeigen # Einen Prozess beenden kill 1024 # Beenden Sie mehrere Prozesse und trennen Sie die Prozessnummern durch Leerzeichen kill 1024 2048 # kill -9 bedeutet, den Prozess sofort zu beenden kill -9 1024
Verwenden von Semaphoren zum Verwalten von Nginx-Prozessen Nginx-Prozesse können auf folgende Arten verwaltet werden: Verwenden Sie Semaphoren, um die Master- und Worker-Prozesse zu verwalten (es wird nicht empfohlen, Semaphoren zur Verwaltung des Worker-Prozesses zu verwenden; der Worker-Prozess sollte vom Master-Prozess verwaltet und gewartet werden). Master-Prozess Überwachen von Arbeitsprozessen
Verwalten von Arbeitsprozessen Empfangen von Signalen
Beispiel: Beenden Sie den Masterprozess mit dem Kill-Befehl töten -s SIGTERM 1325 Mit dem Kill-Befehl lässt Nginx die Datei erneut einlesen. Dadurch wird der Worker-Prozess geschlossen und ein neuer Worker-Prozess generiert. Der Master-Prozess (ID) bleibt unverändert. kill -s SIGHUP 1325 Arbeitsprozess Empfangen von Signalen
Obwohl es möglich ist, wird davon abgeraten, Semaphoren zur direkten Verwaltung von Arbeitsprozessen zu verwenden. Arbeitprozesse sollten vom Masterprozess verwaltet und gewartet werden. Beispiel: Verwenden Sie den Kill-Befehl, um einen Arbeitsprozess zu beenden. Dadurch wird ein Arbeitsprozess beendet. Linux sendet ein SIGCHLD-Signal an den übergeordneten Prozess (Masterprozess) des beendeten Arbeitsprozesses. Daher erkennt der Masterprozess, dass einer unserer untergeordneten Prozesse möglicherweise ein Problem hat, und startet einen neuen Arbeitsprozess, um die Anzahl der Arbeitprozesse beizubehalten. töten -s SIGTERM 1332 Befehlszeile
Sie können [itbsl@master ~]$ nginx -h Nginx-Version: nginx/1.18.0 Verwendung: nginx [-?hvVtTq] [-s Signal] [-c Dateiname] [-p Präfix] [-g Anweisungen] Optionen: -?,-h: diese Hilfe -v: Version anzeigen und beenden -V: Version anzeigen und Optionen konfigurieren, dann beenden -t: Konfiguration testen und beenden -T: Konfiguration testen, sichern und beenden -q: Nicht-Fehlermeldungen während des Konfigurationstests unterdrücken -s Signal: Signal an einen Masterprozess senden: Stoppen, Beenden, Neuöffnen, Neuladen -p Präfix: Präfixpfad festlegen (Standard: /usr/local/nginx-1.18.0/) -c Dateiname: Konfigurationsdatei festlegen (Standard: conf/nginx.conf) -g-Direktiven: globale Direktiven aus der Konfigurationsdatei setzen Parameterbeschreibung:
Prinzip des Neuladens der Konfigurationsdatei Wir wissen, dass wir nginx reibungslos aktualisieren können, indem wir ein SIGHUP-Signal an den nginx-Masterprozess senden oder den Befehl Laden Sie den Konfigurationsdateiprozess neu
Wenn wir es anhand eines Diagramms beschreiben würden, sähe es folgendermaßen aus: Grafische Analyse: 1. Der grüne Status auf der linken Seite ist der Status vor der Ausführung des Befehls 2. Um zu simulieren, dass der ursprüngliche Worker-Prozess nach der Verarbeitung der Anforderung nach der Ausführung des Befehls <?php Schlaf (15); echo json_encode(['msg' => 'hallo Welt']);die(); 3. Wir wissen bereits, dass der Masterprozess die Aufgabe zur Verarbeitung an den Worker-Unterprozess übergibt. Derzeit gibt es nur eine Aufgabe, sodass nur ein Workerprozess die Aufgabe verarbeiten muss. 4. Führen Sie den Reload-Befehl aus. Der Master-Prozess erstellt 4 neue Arbeitsprozesse (die gelben Arbeitsprozesse im Bild oben) (je nach Ihrer Konfiguration) und fährt die alten, inaktiven Arbeitsprozesse (die grünen Arbeitsprozesse) herunter. Die alten Arbeitsprozesse, die Anfragen verarbeiten, werden nicht sofort heruntergefahren, sondern erst, nachdem die Anfragen verarbeitet wurden. 5. Der letzte verbleibende alte Worker-Prozess wird nach Abschluss seiner Aufgabe heruntergefahren. Die verbleibenden sind alle neue Worker-Prozesse, die durch die neue nginx.conf-Konfiguration generiert wurden. Sie können das Bild unten sehen. Der heruntergefahrene alte Worker-Prozess ist immer noch sichtbar, da er die Verarbeitung der Aufgabenschnittstelle, die oben 15 Sekunden lang schläft, noch nicht abgeschlossen hat. ZusammenfassenDies ist das Ende dieses Artikels über Nginx-Prozessmanagement und Überladungsprinzipien. Weitere Informationen zu Nginx-Prozessmanagement und Überladungsprinzipien finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Beispielcode zur Implementierung eines Foto-Stacking-Effekts mit CSS
>>: Beispielcode zur Implementierung von Follow Ads mit JavaScript
Wenn Sie das Breitenattribut direkt auf den Stil d...
I. Einleitung Die Docker-Technologie erfreut sich...
Hintergrund Da die Anzahl der Anwendungssysteme w...
Heute bin ich wieder in die Falle getappt. Ich bi...
1. Spring Boot unterstützt kein JSP-JAR-Paket, JS...
Inhaltsverzeichnis 1. Übersicht der Seite 2. Infi...
Tipps zum Senden von HTML-E-Mails: Verwenden Sie ...
Inhaltsverzeichnis 3 Möglichkeiten zum Bereitstel...
Vorwort Kürzlich stieß ich auf eine Anforderung, ...
Lösung: Fügen Sie in <head> den folgenden Co...
Der Zweck der Einrichtung eines MySQL-Abfragecach...
Vorwort Die Methode zum Konfigurieren von IP-Adre...
Veranstaltungsbeschreibung onactivate: Wird ausgel...
Wenn Sie eine virtuelle Maschine verwenden, stell...
1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...