Nginx 和 PHP-FPM 连接不足

E3p*_*3pO 8 nginx php-fpm

我一直遇到这样的错误,

[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
Run Code Online (Sandbox Code Playgroud)

我将 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
Run Code Online (Sandbox Code Playgroud)

导致

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

我刚刚推出了一个新网站,该网站的流量相当可观。此流量是合法的,当达到限制时,用户会收到 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
Run Code Online (Sandbox Code Playgroud)

我的 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;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能停止连接用完?为什么这种情况不断发生?我正在实时监控 Google Analytics 上的流量,当用户数超过 120 时,我的 php-fpm.log 中充满了这些警告。

wom*_*ble 5

您是否考虑过遵循日志消息中提供的良好建议,提高pm.max_children? 您有大量可用 RAM 来容纳它们。

回答您的问题:

  • 我该怎么做才能停止连接用完?提供更多连接,或减少您收到的连接数。
  • 为什么这种情况不断发生?因为你的连接总是用尽。