Heim >Backend-Entwicklung >PHP-Problem >Was tun, wenn php-cgi unter Linux stoppt?
Die Lösung für das Anhalten von PHP-CGI unter Linux besteht darin, die Konfigurationselemente von Nginx zu ändern, die Anzahl der FastCGI-Anfragen zu reduzieren und zu versuchen, die Puffer unverändert zu lassen, z. B. [fastcgi_buffer_size 128k;].
Die Betriebsumgebung dieses Artikels: Linux 5.9.8, PHP 7, Thinkpad T480-Computer.
Vorwort:
Ich habe zufällig entdeckt, dass ein Server in der Produktion (Centos 5.2 64-Bit 4G-Speicher) immer das Problem hatte, dass die Website nicht geöffnet werden konnte. Später ging ich zum Server, um nachzuschauen, und stellte fest, dass sowohl Nginx als auch PHP-CGI liefen, aber die CPU-Auslastung von PHP-CGI war zu diesem Zeitpunkt 0. Also habe ich sofort das Datei-Handle-Limit überprüft:
ulimit -n
Das Ergebnis war: 1024, was für Dienste in der Produktion zu klein ist.
Die meisten im Internet angebotenen Lösungen bestehen darin,
ulimit -SHn 51200 # 51200可自己根据应用调整direkt einzugeben. Der Nachteil dieser Methode liegt auf der Hand. Sobald Sie sich abmelden, werden die Einstellungen ungültig. Es heißt auch, den Befehl direkt nach /etc/rc.d/rc.local zu schreiben. Öffnen Sie /etc/security/limits.conf Folgendes festlegen (falls nicht, fügen Sie es ein)Der Code lautet wie folgt:
* soft nofile 51200 * hard nofile 51200Melden Sie sich nach dem Beenden erneut an und überprüfen Sie, ob die Anzahl der Handles korrekt auf 51200 eingestellt ist. Wenn Sie auf eine ähnliche Situation stoßen, können Sie überprüfen, ob die Ursache darin liegt, dass die Einstellung für die Datei-Handle-Nummer zu klein ist. Lösung für 502 Bad Gateway beim Zugriff aufNginx 502 Bad Gateway bedeutet, dass das angeforderte PHP-CGI ausgeführt wurde, aber aus irgendeinem Grund (normalerweise ein Problem beim Lesen von Ressourcen) nicht ausgeführt wurde, was zu PHP-CGI führte Der Prozess wird beendet. Im Allgemeinen sind Websites mit zu hoher Parallelität anfällig für diesen Fehler. Es gibt viele Gründe, warum 502 Bad Gateway auftritt, aber die meisten Leute können das Problem lösen, indem sie die folgenden Parameter ändern. Ändern Sie mehrere Konfigurationselemente von Nginx, um die Anzahl der FastCGI-Anfragen zu reduzieren und versuchen Sie, die Puffer unverändert zu lassen: Der Code lautet wie folgt
fastcgi_buffer_size 128k; fastcgi_buffers 2 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k;Öffnen Sie die Datei /usr/local/php/etc/php-fpm.conf und ändern Sie die folgenden paar Parameter: Der Code lautet wie folgt
25 requests">2048 65535 30s 60srequest_terminate_timeout bezieht sich auf die Ausführungszeit des Skripts von fast-cgi, die standardmäßig 0 Sekunden beträgt. Die Bedeutung von 0 besteht darin, PHP-CGI ohne zeitliche Begrenzung weiter ausführen zu lassen. Wenn Sie den Wert hier auf 0 setzen, bleibt der 502-Status bestehen und ändert sich nicht, wenn ein 502 Bad Gateway angezeigt wird. Wenn Sie es jedoch auf 5 Sekunden einstellen, wird PHP-CGI nach 5 Sekunden automatisch wiederhergestellt. Dieser Wert kann entsprechend der Leistung Ihres Servers eingestellt werden. Hier stelle ich ihn auf 60s ein. max_children repräsentiert den Verarbeitungsprozess von PHP-CGI. Wenn max_children auf einen kleineren Wert eingestellt ist, z. B. 5-10, ist PHP-CGI „sehr müde“, die Verarbeitungsgeschwindigkeit ist sehr langsam und die Wartezeit ist länger. Wenn eine Anfrage längere Zeit nicht verarbeitet wird, tritt der Fehler 504 Gateway Timeout auf. Das Festlegen von max_children muss auch entsprechend der Leistung des Servers festgelegt werden. Unter normalen Umständen beträgt der von jedem PHP-CGI verbrauchte Speicher etwa 20 MB 25. Die standardmäßige statische Verarbeitungsmethode von PHP-FPM führt dazu, dass der PHP-CGI-Prozess lange Zeit Speicher belegt und nicht freigegeben werden kann. Dies ist auch einer der Gründe für Nginx-Fehler kann in den Apache-ähnlichen Modus geändert werden. Führen Sie nach Abschluss der Änderung lu-restart (LuManager-Serververwaltungssystem) aus. Empfohlenes Lernen:
Das obige ist der detaillierte Inhalt vonWas tun, wenn php-cgi unter Linux stoppt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!