web-dev-qa-db-ja.com

Nginx + PHP-FPM = "ランダム" 502 Bad Gateway

Nginxを実行し、処理のためにFastCGIを介してPHPリクエストをPHP-FPMにプロキシしています。 502 BadGatewayエラーページをランダムに受信します-PHP Webサイトを非常に高速にクリックするか、ページを1〜2分更新することで、この問題を再現できます。502エラーページがすべて表示されたらブラウザを更新すると、ページが適切に更新されます。

これが私の設定です:

nginx/0.7.64 PHP 5.3.2(fpm-fcgi)(ビルド:2010年4月1日06:42:04)Ubuntu 9.10(最新の2.6 Paravirt)

この./configureディレクティブを使用してPHP-FPMをコンパイルしました

./configure --enable-fpm --sysconfdir =/etc/php5/conf.d --with-config-file-path =/etc/php5/conf.d/php.ini --with-zlib --with -openssl --enable-Zip --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-soap --enable-sockets --disable-cgi --with-curl --with -curlwrappers --with-Gd --with-mcrypt --enable-memcache --with-mhash --with-jpeg-dir =/usr/local/lib --with-mysql =/usr/bin/mysql- with-mysqli =/usr/bin/mysql_config --enable-pdo --with-pdo-mysql =/usr/bin/mysql --with-pdo-sqlite --with-pspell --with-snmp --with- sqlite --with-tidy --with-xmlrpc --with-xsl

私のphp-fpm.confは次のようになります(関連部分):

 ...   
<value name="pm">
     <value name="max_children">3</value>
     ...
     <value name="request_terminate_timeout">60s</value>
       <value name="request_slowlog_timeout">30s</value>
       <value name="slowlog">/var/log/php-fpm.log.slow</value>
       <value name="rlimit_files">1024</value>
       <value name="rlimit_core">0</value>
       <value name="chroot"></value>
       <value name="chdir"></value>
       <value name="catch_workers_output">yes</value>
       <value name="max_requests">500</value>
...

Max_childrenを10に増やしてみましたが、違いはありません。また、「動的」に設定し、max_childrenを50に設定し、start_serverを「5」に設定してみましたが、違いはありません。

1つと5つのnginxワーカープロセスの両方を使用してみました。

私のfastcgi_paramsconfは次のようになります:

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;

Nginxはエラーを次のようにログに記録します:

[エラー] 3947#0:* 10530 connect()が失敗しました(111:接続が拒否されました)アップストリームへの接続中、クライアント:68.40.xxx.xxx、サーバー:www.domain.com、リクエスト: "GET /favicon.ico HTTP/1.1 "、アップストリーム:" fastcgi://127.0.0.1:9000 "、ホスト:" www.domain.com "

PHP-FPMは、エラー時に次のログを記録します。

[NOTICE] pid 17161, fpm_unix_init_main(), line 255: getrlimit(nofile): max:1024, cur:1024 
[NOTICE] pid 17161, fpm_event_init_main(), line 93: libevent: using epoll 
[NOTICE] pid 17161, fpm_init(), line 50: fpm is    running, pid 17161 
[DEBUG] pid 17161, fpm_children_make(), line 403: [pool default] child 17162 started 
[DEBUG] pid 17161, fpm_children_make(), line   403: [pool default] child 17163    started 
[DEBUG] pid 17161,  fpm_children_make(), line 403: [pool default] child 17164 started 
[NOTICE] pid 17161, fpm_event_loop(), line 111: ready to handle connections

問題を再現すると、CPU使用率は最大で約10〜15%になります。私の無料メモリ(無料-m)は> 130MBです

Php5-cgiを使用してphpリクエストを処理しているときに、この断続的な502 BadGatewayの問題が発生しました。誰かがこれを修正する方法を知っていますか?

編集/更新:スーパーバイザーを使用してphp-fpmを起動しています(このため、非デーモン化されていません)。

6
user39547

私はあなたのmax_childrenが低すぎる

<value name="max_children">3</value>

また、php-fpmのTCPポートからunixソケットに切り替えてみることができます。

php-fpm.conf

<value name="listen_address">/tmp/php.sock</value>

nginx.conf

fastcgi_pass unix:/tmp/php.sock;

手の込んだ:

  1. Unixソケットは約20%高速です
  2. 接続ごとに時間待機ソケットを使用しません
2
SaveTheRbtz