接続が不足しているNginxとPHP-FPM


9

私はこのようなエラーに遭遇し続けます、

[02-Jun-2012 01:52:04] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 19 idle, and 49 total children
[02-Jun-2012 01:52:05] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 19 idle, and 50 total children
[02-Jun-2012 01:52:06] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 19 idle, and 51 total children
[02-Jun-2012 03:10:51] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 18 idle, and 91 total children

私はphp-fpmの設定をこれらに変更しました、

pm.max_children = 150 (It was at 100, i got a max_children reached and upped to 150)
pm.start_servers = 75
pm.min_spare_servers = 20
pm.max_spare_servers = 150

その結果

[02-Jun-2012 01:39:19] WARNING: [pool www] server reached pm.max_children setting (150), consider raising it

私はそれでかなりの量のトラフィックを得ている新しいウェブサイトを立ち上げたところです。このトラフィックは正当であり、制限に達するとユーザーは504ゲートウェイタイムアウトを受け取ります。

IPTABLESを使用したサーバーへの接続が制限されており、fail2banを実行して、nginxアクセスログを追跡しています。トラフィックはすべて合法であり、ユーザーのスペースが不足しています。

私は現在、ubuntu 64ビットのデュアルコアボックスで実行しています。

free
             total       used       free     shared    buffers     cached
Mem:       6114284    5726984     387300          0     141612    4985384
-/+ buffers/cache:     599988    5514296
Swap:       524284       5804     518480

私のphp.ini max_input_time = 60

私のnginx設定は

worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 19000;
    # multi_accept on;
}
worker_rlimit_nofile    20000;  #each connection needs a filehandle (or 2 if you are proxying)

client_max_body_size 30M;
client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;

    location ~ \.php$ {
    try_files $uri /er/error.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_max_temp_file_size 0;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

接続が不足しないようにするにはどうすればよいですか?なぜこれが起こり続けるのですか?Google Analyticsでトラフィックをリアルタイムで監視しています。ユーザー数が約120を超えると、php-fpm.logにこれらの警告が表示されます。

回答:


5

ログメッセージで提供される細かいアドバイスに従って、値を上げることを検討しましたpm.max_childrenか?あなたはそれらを収容するために無料のRAMのバケットロードを持っています。

あなたの質問に答えるには:

  • 接続が不足しないようにするにはどうすればよいですか?より多くの接続をプロビジョニングするか、受信する接続の数を減らします。
  • なぜこれが起こり続けるのですか?接続が不足し続けるからです。

すみません、エラーは100から150に更新した後にタイムスタンプが付けられました。そうです。すべてのRAMにどのような設定をする必要がありますか?
E3pO

あなたはそれを上げる必要がある(free/mem_per_worker)+150場合は、freeあなたが持つことになりますメモリの量を考慮にメモリ要件以上の負荷とともに増加する他のプロセスのニーズを取った後で、mem_per_workerあなたが必要とする各PHPワーカープロセスを予見メモリの最大量です。
ウォンブル

4

ウェブサーバーでも同じ問題が発生しました。

メモリリークを回避するために、Xリクエストごとに子プロセスを再生成することができます。ApacheとFPMでうまく機能し、同様にうまく機能し始めています。

 pm.max_requests = 50000

これにより、50kリクエストごとに子プロセスが再起動されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.