Frage Nginx + php-fpm Fehler "504 Gateway Timeout" mit fast Nulllast (auf einem Test-Server)


Nach dem Debuggen für 6 Stunden - ich gebe das auf: |

Wir haben eine nginx + php-fpm + mysql im LAN mit fast 100 wordpress (erstellt und verwendet von verschiedenen Designern / Entwicklern, die alle an test Wordpres Setup arbeiten)

Wir verwenden nginx ohne Probleme von zu lange.

Heute plötzlich - Nginx kehrte aus heiterem Himmel "504 Gateway Timeout" zurück ...

Ich habe das Nginx-Fehlerprotokoll für einen virtuellen Host überprüft ...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

Als ich php-fpm über Port 9000 über den TCP-Modus laufen lasse, habe ich "netstat | grep 9000" ausgeführt und etwas Ungewöhnliches bemerkt ... (Einfügen von Teilausgaben hier zum leichteren Lesen)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

Es gibt viele "CLOSE_WAIT" & "FIN_WAIT2" -Paare, wie unten hervorgehoben (in der obigen Ausgabe):

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

Bitte beachten Sie Port 46680 oben.

Ich habe mysql langsame Abfragen Fehlerprotokoll aktiviert, aber es hat nicht funktioniert.

Nun starte php5-fpm jede Minute über einen Cronjob neu (siehe Befehl unten), damit alles "flüssig" läuft, aber ich hasse Patchwork und will das lösen ...

1 * * * * service php5-fpm restart > /dev/null

Ich habe ausführlich auf Google gesucht - habe keine Hilfe bekommen. Wie bereits erwähnt, ist dies ein Test-Server im LAN, die CPU-Last wird nie von 0.10 gekreuzt und die Speicherauslastung liegt ebenfalls unter 25% (System hat 2 GB RAM und Ubuntu-Server installiert) Wenn Sie also seine Zeit finden - verwirrend, um mir zu helfen, lassen Sie bitte wenigstens einen Hinweis fallen.

Vielen Dank im Voraus für Hilfe.

-Rahul

(Notiz - das ist Umbuchung von - http://forum.nginx.org/read.php?11,127694)

Update: Ich habe eine Antwort gefunden, die unten veröffentlicht wird.


27
2017-09-07 07:23


Ursprung




Antworten:


Ich habe eine Antwort auf meinen Beitrag im nginx-Forum gefunden - http://forum.nginx.org/read.php?2,127584

Die Antwort ist in meinem Fall:

request_terminate_timeout=30s

in php-fpm config (normalerweise /etc/php5/fpm/php-fpm.conf)

Beachten Sie, dass Sie auch andere Werte als 30s verwenden können.

Ich habe es verwendet, um meinen Wert in main zu vergleichen php.ini Datei, die ist:

max_execution_time = 30

Danke allen. :-)


28
2017-09-08 11:07



Diese Konfiguration kann auch in der www.conf-Datei gefunden werden. Danke für die Antwort, das scheint der Trick gewesen zu sein. - eddiemoya
Dies ist eine Direktive auf Pool-Ebene. Sie erhalten eine Fehlermeldung, wenn Sie versuchen, sie in die php-fpm.conf einzutragen [global] Sektion. Es funktioniert nur dort, wenn Sie auch Ihre Pool-Konfiguration dort haben. Ebenfalls: request_terminate_timeout docs. - tanius
Wenn das die richtige Antwort ist, die ich WIRKLICH BENÖTIGTE, dann wird dieser Freitag das Beste von 2015 sein. - Philip
Ich habe das Putten gefunden request_terminate_timeout=30s in mein php-fpm.conf Datei verursachte einen (111 Connection Refused) Fehler. Als ich es zu meinem www.conf Datei hat funktioniert. - AJB
Auf CentOS 7.2 befindet sich request_terminate_timeout bei Verwendung von php7 in: /etc/php-fpm.d/www.conf - nadavkav


Hier, wie es mein Problem gelöst hat:

Nehmen Sie folgende Änderungen an /etc/nginx/nginx.conf in http {section

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

und dann nginx neu starten

/etc/init.d/nginx neu starten


16
2017-11-12 20:42



Ja, das sieht wirklich nicht so aus, als hätte es etwas mit dem Problem zu tun, das der Fragesteller hat. - HopelessN00b
aber zum Glück brauchte ich das :) - luchaninov
Das hat das Problem auch für mich behoben, danke. - Shane Grant
Das behebt mein Problem nicht, aber es erlaubte mir, den tatsächlichen Fehler statt der Zeitüberschreitungsmeldung zu sehen, was mich zum eigentlichen Problem führte. - Michael


Wenn Sie PHP 5.3 verwenden, erhöhen Sie den Rückstand.

Wenn Sie PHP 5.2 verwenden, portieren Sie den Patch zurück, um die Backlog-Größe von 128 zu erhöhen.

Verwenden Sie auch einen Unix-Socket anstelle eines TCP-Sockets. unix: /tmp/php5-cgi.sock (oder der entsprechende Pfad)


4
2017-09-07 07:49



Ich würde zustimmen müssen, vor allem mit der Verwendung von Unix Sockets. - Matt
Danke Karmawhore für die Antwort. Ich habe eine Lösung auf der Nginx-Mailingliste gefunden. - rahul286
@ rahul286 welche antworten? ich bin interessiert! - breiti
@breiti siehe meine Anser unten - serverfault.com/a/179136/17440 - rahul286


Vielen Dank

request_terminate_timeout = 30s

Es funktioniert perfekt für mich

aber ich musste die Zeile in diese Datei einfügen: "/etc/php5/fpm/pool.d/www.conf", also in der "Worker Section".

PHP 5.3.21-1 - Wordpress 3.5.1

http://php-fpm.org/wiki/Configuration_File


3
2018-03-02 09:49



Ich hatte eine Kombination von Faktoren, die am Ende den 502 Fehler verursacht haben, dass dein Rezept den Zaubertrick gemacht hat! vielen vielen Dank! - Jorge Vicente Mendoza


in meinem Fall (gleiche nginx Fehlermeldung), einige problematische PHP-Skripte enden nicht zu führen und warten auf etwas, was nicht mehr php5-fpm Kinder für nginx zur Auswahl.

Fix:

  1. Add Execution Time Limit andere erwähnte es diesen Beitrag. request_terminate_timeout=30s
  2. Kinderzahl erhöhen. und alles hat wie ein Zauber funktioniert. pm.max_spare_servers=16  pm.min_spare_servers=2 

jetzt hat alles wie ein Zauber funktioniert.


2
2018-06-10 08:30



Ich hatte eine lange laufende externe Verbindungsanfrage in meinem PHP-Skript. Suchen Sie nach diesen lang andauernden Aufgaben und legen Sie eine Zeitüberschreitung fest. - Ali Nadalizadeh


Ich hatte das gleiche Problem und löste es, indem ich Apache vollständig entfernte:

yum remove httpd

Danach empfehle ich, sowohl PHP als auch NGINX neu zu starten:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

1
2018-04-12 10:42



Wir hatten dann keinen Apache auf unserem Server. Freut mich, Ihren Fall zu kennen, da er uns in Zukunft helfen kann. - rahul286


Für mich ist das gleiche Problem aufgetreten, nachdem rabbitmq vom Server entfernt wurde. Nichts von dem obigen war nicht hilfreich, die Neuinstallation aller php5-Module löste das Problem. Ich hatte Debian 8.2 auf diesem Server. Hoffnung wird für jemanden hilfreich sein.


0
2017-11-26 17:58





Dies kann auch Leuten helfen:

Je nachdem, was dein Setup ist, solltest du dir die fastcgi Konfigurationsparameter sowie php ansehen ... in meinem Fall (ich benutze apache2 + php5-fpm) und max_execution time hängt auch davon ab wie lange das fastcgi Modul auf Antwort wartet ( -Idle-Timeout) ...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer


-1
2018-03-18 19:28



warum benutze apache2 ?? Ich meine, du kannst nginx direkt benutzen, um mit php5-fpm zu interagieren. Keine Notwendigkeit, Apache zu verwenden, wenn Sie nginx haben! - rahul286
Wenn du nginx verwendest, wenn andere Nginx NICHT benutzen, wird das hoffentlich helfen. :-) ... Ich bin über diese Seite gestolpert, auf der Suche nach Apache2 + php5-fpm verwandten Frage - farinspace
OK. Ich dachte, Sie verwenden Nginx mit Apache für PHP-Skripte wie einige Leute es in der Vergangenheit verwendet. - rahul286