web-dev-qa-db-ja.com

PHP-FPMを「/var/run/php5-fpm.sock;」の代わりに「IPAddress:Port」でリッスンするようにします。

今日 blitz.io を使用して自分のサイトの負荷テストを行っていたため、 RAM(50%以上))およびCPUパワー(70%以上)が利用可能であるにもかかわらず、結果は、サイトが1秒あたり特定の数の同時ユーザーでタイムアウトを開始したことを示しました。

私のサイトのNginxエラーログ(/var/log/nginx/example.com.error.log)は次のようなものを示しています:

2013/02/12 19:03:57 [エラー] 13749#0:* 3175 unix:/var/run/php5-fpm.sockへのconnect()が失敗しました(11:リソースは一時的に利用できません)アップストリーム、クライアントに接続しています: 54.123.456.46、サーバー:example.com、リクエスト: "GET/HTTP/1.1"、アップストリーム: "fastcgi:// unix:/var/run/php5-fpm.sock:"、ホスト: "example.com"

エラーをグーグルすると私は this answer につながりました。これは、問題の解決策としてunixソケットの代わりにTCP\IP接続を使用することを示しています。 UNIXソケットの「高負荷の場合の問題はよく知られています」

だから、答えで示唆されているように:

  • /etc/php5/fpm/pool.d/www.confでlisten = /var/run/php5-fpm.socklisten 127.0.0.1:9000に置き換えました

  • Distrio(Debian Wheezy)には/etc/nginx/php_locationがないため、何もしませんでした。

  • 私のサイトのNginx設定ファイル、つまり/etc/nginx/sites-available/example.comでfastcgi_pass unix:/var/run/php5-fpm.sock;を使用しているため、fastcgi_pass 127.0.0.1:9000;に置き換えました

問題は、ウェブサイトにアクセスすると502 Bad Gatewayエラーが発生することです。はい、私はreload NginxとPHP-FPMをしました。何が悪いのですか? (ここでの初心者は、実行することで学ぶために最善を尽くしています。)

これに関連する場合、Sudo service php5-fpm restartを実行すると、次のエラーが発生します。

[FAIL] Restarting PHP5 FastCGI Process Manager: php5-fpm failed!

そして、これは私が前述の変更を加えた後にのみ起こっています。どうすれば修正できますか?

さらに情報が必要な場合はお知らせください。


更新

ファイル/etc/nginx/sites-available/defaultは次のように述べています:

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;

#   # With php5-fpm:
#   fastcgi_pass unix:/var/run/php5-fpm.sock;

つまり、私のサーバーがPHP-FPMを実行している場合、それは[〜#〜] [〜#〜]で、選択なしで、 /var/run/php5-fpm.sock

3
its_me

$ Sudo php5-fpm -tコマンドを使用して、PHP-FPMの設定に問題がないかどうかをテストしました(問題がなければ、エラー/情報が表示されます)。

したがって、出力は次のようになります。

[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33
[13-Feb-2013 18:35:00] ERROR: failed to load configuration file '/etc/php5/fpm/php-fpm.conf'
[13-Feb-2013 18:35:00] ERROR: FPM initialization failed

エラーは、/etc/php5/fpm/pool.d/www.confの33行目で何かが間違っていることを示しています。これは、たまたまlisten 127.0.0.1:9000です(あまり偶然ではありませんか?)。

それを見た後、すぐに他の行と比較したところ、=(等号)がありませんでした。

だから、これは本来あるべきものです:listen = 127.0.0.1:9000そしてそれですべてが修正されました!

4
its_me

(502とエラーメッセージに基づいて)php-fpmサービスが開始に失敗しているようです。

他にポート9000を使用している可能性はありますか?実行を確認するには:

_Sudo lsof -P | grep TCP | grep LISTEN
_

TCP localhost:9000 (LISTEN)のようなものを探します。ある場合は、別のポート、たとえば9001を使用できます。

確認するのに適した場所は、php-fpmエラーログです。デフォルトでは有効になっていない場合があります。 php-fpm confファイル(私のシステムでは/etc/php5/fpm/php-fpm.conf)を見ると、 'error_log'設定が見つかります。これは、エラーログへのパスです。これがコメント化されている場合は、コメントを外し、php-fpmサービスを再起動して、ログファイルの内容が何であるかを確認します。

3
chrskly

選択でIP /ポートまたはUnixソケットを使用できます。

これはphp-fpm設定に依存します。ファイルはwww.confで、私のシステム(Ubuntu 16.04)では/etc/php/7.0/fpm/pool.dにあります。

このファイル内でlistenというディレクティブを見つけることができます。たとえば、このディレクティブを/run/php/php7.0-fpm.sockに設定すると、nginxサイトの設定fastcgi_passunix:/run/php/php7.0-fpm.sockになります;

ただし、127.0.0.1:9000をリッスンするように設定した場合、fastcfg_pass127.0.0.1:9000になります。

2
zeroleaf
[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33

ロードされていませんwww.confこれは、33行目にエラーがあり、おそらくソケットを使用するデフォルトにフォールバックしているためです。

0
mgorven