Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem, dass die Ausführung einer PHP-Methode zu lange dauert

So lösen Sie das Problem, dass die Ausführung einer PHP-Methode zu lange dauert

藏色散人
藏色散人Original
2021-07-23 10:51:324923Durchsuche

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.

So lösen Sie das Problem, dass die Ausführung einer PHP-Methode zu lange dauert

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn