web-dev-qa-db-ja.com

Nginx + php-fpm "504 Gateway Time-out"エラー、負荷はほぼゼロ(テストサーバー上)

6時間デバッグした後、これをあきらめます:|

Nginx + php-fpm + mysqlがLANにあり、ほぼ100ですwordpress(作成され、さまざまな設計者/開発者がすべてテストwordpres設定に取り組んでいます)

長い間問題なくnginxを使用しています。

今日、突然、nginxは突然「504ゲートウェイタイムアウト」を返し始めました...

仮想ホストのnginxエラーログを確認しました...

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"

TCP=モードでポート9000でphp-fpmを実行すると、「netstat | grep 9000」を実行して、何か異常なことに気づきました...読みやすさ)

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             

以下の(上記の出力で)強調表示されているように、「CLOSE_WAIT」と「FIN_WAIT2」のペアはたくさんあります。

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

上記のポート46680に注意してください。

Mysqlのスロークエリエラーログを有効にしましたが、機能しませんでした。

現在、cronjob(下記のコマンドを参照)を介して毎分php5-fpmを再起動し、すべてを「スムーズに」実行しますが、パッチワークが嫌いでこれを解決したい...

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

私はGoogleで広範囲に検索しました-助けがありませんでした。前述のように、これはLANのテストサーバーであり、CPU負荷は0.10を超えず、メモリ使用率も25%未満です(システムに2GB RAMおよびubuntu-serverがインストールされています)。時間を浪費して私を助けてください、少なくともヒントをドロップしてください。

助けてくれてありがとう。

-ラーフル

(注-これは- http://forum.nginx.org/read.php?11,127694の再投稿です

更新:以下に掲載されている回答を見つけました。

29
rahul286

Nginxフォーラムの投稿に回答が見つかりました- http://forum.nginx.org/read.php?2,127854

私の場合、答えは次のように設定することです:

request_terminate_timeout=30s

php-fpm設定(通常/etc/php5/fpm/php-fpm.conf

30秒以外の値も使用できることに注意してください。

私はそれを使用して、メインのphp.iniファイルの値と一致させました。

max_execution_time = 30

皆さんありがとう。 :-)

31
rahul286

ここでそれが私の問題をどのように解決したか:

http {セクションの/etc/nginx/nginx.confに次の変更を加えます

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

そしてnginxを再起動します

/etc/init.d/nginx restart

16
Vijay Kumar

PHP 5.3を使用している場合は、バックログを増やします。

PHP 5.2を使用している場合は、パッチをバックポートして、バックログのサイズを128から増やします。

また、TCPソケットではなくUNIXソケットを使用してください。unix:/tmp/php5-cgi.sock(または関連するパス)

4
karmawhore

まことにありがとうございます

request_terminate_timeout = 30s

それは私にとって完璧に機能します

しかし、このファイルに「/etc/php5/fpm/pool.d/www.conf」という行を挿入する必要がありました。つまり、「ワーカーセクション」にあります。

PHP 5.3.21-1-Wordpress 3.5.1

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

3
Franck

私の場合(同じnginxエラーメッセージ)、一部の問題のあるphpスクリプトは実行が終了せず、何かを待機していないため、nginxが選択するphp5-fpmの子がなくなりました。

修正:

  1. 実行時間制限を追加します。 request_terminate_timeout=30s
  2. 子供の数を増やします。そしてすべてが魅力のように働いた。 pm.max_spare_servers=16pm.min_spare_servers=2

今ではすべてが魅力のように機能しました。

2
c2h2

これも人々を助けるかもしれません:

設定に応じて、fastcgi設定パラメーターとphp ...(私の場合はApache2 + php5-fpmを使用しています)を確認する必要があります。max_execution時間は、fastcgiモジュールが応答を待つ時間にも依存します( -idle-timeout)...

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

0
farinspace

私たちの場合の問題は、php-fpmがNFS共有でセッションを開くことができなかったことでした。NFSを再起動した後、1つのノードのみがディレクトリにアクセスできるようにした後、Webノードの1つがディレクトリをロックしたようです。問題は解決されました。ああ、助かった

Php-fpmログを常に確認する必要があります。私の場合、場所は/ var/opt/remi/php72/log/php-fpmでした。

より良いデバッグのために遅いスクリプトのログを有効にし、logsディレクトリにあるwww-slow.logファイルを確認する必要もあります

slowlogが機能していることを確認するには、www.confに次の設定が存在することを確認してください

slowlog = /var/opt/remi/php72/log/php-fpm/www-slow.log

request_slowlog_timeout = 5s

これにより、5秒を超えるスクリプトがログに記録され、問題の原因となっているphpコードの場所が/var/opt/remi/php72/log/php-fpm/www-slow.logに記録されます。パスを変更して、あなたの環境

0
Mawardy

私にとって、サーバーからrabbitmqを削除した後、同じ問題が発生しました。上記のどれも役に立たなかった、すべてのphp5モジュールを再インストールすると問題が解決しました。そのサーバーにはDebian 8.2がありました。誰かの役に立つことを願っています。

0
Taggart Comet

同じ問題があり、Apacheを完全に削除することで解決しました。

yum remove httpd

その後、PHPとNGINXの両方を再起動することをお勧めします。

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