今日 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.sock
をlisten 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
?
$ 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
そしてそれですべてが修正されました!
(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サービスを再起動して、ログファイルの内容が何であるかを確認します。
選択で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_pass
はunix:/run/php/php7.0-fpm.sock
になります;
ただし、127.0.0.1:9000
をリッスンするように設定した場合、fastcfg_pass
は127.0.0.1:9000
になります。
[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行目にエラーがあり、おそらくソケットを使用するデフォルトにフォールバックしているためです。