Lösungen für die lange Ausführungszeit der PHP-Methode: 1. Legen Sie das Nginx-Gateway-Anfrage-Timeout fest. 2. Legen Sie die Obergrenze der PHP-Skriptausführungszeit fest.
Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer
Wie kann das Problem der zu langen Ausführungszeit der PHP-Methode gelöst werden?
Lösung für das Problem 502 Bad Gateway, das durch eine zu lange Ausführungszeit der PHP-Methode verursacht wird
Hintergrund
Ich bin kürzlich auf ein Problem gestoßen, das langfristige E/A-Vorgänge umfassen muss Dieser Teil blockiert den Thread, in dem sich die Anfrage befindet, was dazu führt, dass die Anfrage abgelaufen ist.
Sie fragen sich vielleicht, was daran so schwierig ist? Öffnen Sie einfach einen Thread, um es asynchron zu machen, und dann ist es in Ordnung, den Status zu aktualisieren. Das ist wirklich eine gute Lösung, aber es ist schade, dass dieser gesamte Codesatz jemand anderem gehört. Wenn Sie den Code ändern möchten, wird dies Auswirkungen auf das Geschäft haben. Daher besteht meine Lösung darin, dieses Problem zu lösen, indem ich das Timeout so konfiguriert, dass der Code so weit wie möglich nicht geändert wird.
Lösung
Von den oben genannten Problemen wird das Timeout hauptsächlich durch zwei Faktoren beeinflusst:
Einstellung des Timeouts für Nginx-Gateway-Anfragen
Einstellung der Obergrenze für die Ausführungszeit des PHP-Skripts
Wir haben es in der richtigen Reihenfolge eingerichtet .
Nginx-Gateway-Anfrage-Timeout-Einstellung
Nginx unterstützt sehr fein abgestimmte Timeout-Einstellungen. Die wichtigsten werden wie folgt verwendet:
keepalive_timeout
Nginx verwendet keepalive_timeout, um das Timeout von KeepAlive anzugeben. Gibt die maximale Zeitdauer an, die jede TCP-Verbindung aufrechterhalten werden kann. Der Standardwert von Nginx beträgt 75 Sekunden. Einige Browser behalten nur maximal 60 Sekunden bei und können daher auf 60 Sekunden eingestellt werden.
fastcgi_connect_timeout
Timeout für den Verbindungsaufbau zum FastCGI-Server.
fastcgi_send_timeout
Legen Sie das Timeout für die Übertragung von Anfragen an den FastCGI-Server fest. Legen Sie das Timeout nur zwischen zwei aufeinanderfolgenden Schreibvorgängen fest, nicht für die gesamte angeforderte Übertragung. Wenn der FastCGI-Server innerhalb dieser Zeit nichts empfängt, wird die Verbindung geschlossen.
fastcgi_read_timeout
Timeout beim Lesen der Antwort vom FastCGI-Server. Stellen Sie den Timeout nur zwischen zwei aufeinanderfolgenden Lesevorgängen ein, nicht für die Übertragung der gesamten Antwort. Sollte der FastCGI-Server innerhalb dieser Zeit nichts übermitteln, wird die Verbindung geschlossen.
Wenn man bedenkt, dass die Ausführung eines PHP-Skripts für die letzten drei Einstellungen relevanter ist. Fügen Sie also einfach Einstellungen in der Nginx-Konfigurationsdatei der entsprechenden Website hinzu.
fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s;
Einstellung der Obergrenze für die Ausführungszeit des PHP-Skripts
Die Ausführungszeit des PHP-Skripts wird hauptsächlich durch zwei Konfigurationen beeinflusst:
php.ini 中 max_execution_time 和 max_input_time
Der Standardspeicherort von php.ini ist /usr/local/php/etc/
Platzieren Sie php These Zwei Konfigurationselemente in der .ini-Konfigurationsdatei werden bis zur Obergrenze der Timeout-Zeit geändert.
max_execution_time = 600 max_input_time = 600 php-fpm.conf 中 request_terminate_timeout php-fpm.conf 的默认位置在 /usr/local/php/etc/ request_terminate_timeout 也设置为超时时间的上限。 request_terminate_timeout = 600
Nachdem die Änderung abgeschlossen ist, starten Sie Nginx und PHP-FPM neu.
service nginx reload /etc/init.d/php-fpm reload
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die Ausführung einer PHP-Methode zu lange dauert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!