DigitalOceanに2GBのVPSがあり、WordPress 3.9.1でNGINX、php-fpm、unixソケットを使用したDebian 7でホストしています。
先週まで「502不正なゲートウェイ」エラーが表示されるまで、完全に機能していました。ログを確認したところ、次のことがわかりました。
php5-fpmログはpm.max_childrenに到達したことを示し、nginxログは次を示しています。
[エラー] 3239#0:* 15188 unix:/var/run/php5-fpm.sockへのconnect()が失敗しました(11:リソースが一時的に利用不可)、アップストリーム、クライアント:xxx.xxx.xxx.xxx、サーバーへの接続中: my.domain、リクエスト: "POST /xmlrpc.php HTTP/1.0"、アップストリーム: "fastcgi:// unix:/var/run/php5-fpm.sock:"、ホスト: "xxx.xxx.xxx.xxx"
幸運なしに異なる設定で午後を手動で変更しました。変更するたびに常にデーモンを再起動します。
午後の設定は次のとおりです。
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 10
pm.max_requests = 200
www.conf
にはlisten = /var/run/php5-fpm.sock
有効。
同様の経験をお持ちですか?
最初の問題は、100個のmax_childrenを指定していることです。これは、2GBでは非常に高い値です。私は25人の子供にそれを落とすでしょう。セットアップのためにphp-fpm構成を最適化する方法については、こちらの私の投稿を参照してください。
警告:[プールwww]は忙しいようです(pm.start_servers、またはpm.min/max_spare_serversを増やす必要があるかもしれません)、スポーン
また、UNIXソケットを使用すると、TCP/IPオーバーヘッドなしで直接ネットワークアクセスが提供されるため、わずかに高速になります。欠点は、TCP/IPほどスケーラブルではありません。ソケットが枯渇すると、Nginxは502エラーをスローします。そのような場合、OS設定を微調整して、より大きな接続プールに対応するか、単に切り替えてTCP/IPに切り替えることができます。
Fastcgi confの変更:
fastcgi_pass unix:/var/run/php5-fpm.sock;
に:
fastcgi_pass 127.0.0.1:9000;
ポート9000はphp-fpmで設定されたデフォルトのポートであることに注意してください。別のポートでリッスンするようにphp-fpmを変更した場合は、その値で9000を交換します。 php-fpmとnginxの両方を必ず再起動してください。
これで、すべてを実行しても機能しない場合は、free -mが高いメモリ使用量を返すので、RAMを追加しますサーバーに。