Sigo teniendo errores como estos,
[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
Cambié mi configuración de php-fpm a estos,
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
Resultando en
[02-Jun-2012 01:39:19] WARNING: [pool www] server reached pm.max_children setting (150), consider raising it
Acabo de lanzar un nuevo sitio web que recibe una cantidad considerable de tráfico. Este tráfico es legítimo y los usuarios obtienen 504 tiempos de espera cuando se alcanza el límite.
Tengo conexiones limitadas a mi servidor con IPTABLES y estoy ejecutando fail2ban y haciendo un seguimiento de los registros de acceso nginx. El tráfico es legítimo, me estoy quedando sin espacio para los usuarios.
Actualmente estoy ejecutando en una caja de doble núcleo con ubuntu de 64 bits.
free
total used free shared buffers cached
Mem: 6114284 5726984 387300 0 141612 4985384
-/+ buffers/cache: 599988 5514296
Swap: 524284 5804 518480
Mi php.ini max_input_time = 60
Mi configuración nginx es
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;
}
¿Qué puedo hacer para dejar de quedarme sin conexiones? ¿Por qué sigue ocurriendo esto? Estoy monitoreando mi tráfico en Google Analytics en tiempo real y cuando el número de usuarios supera los 120 mi php-fpm.log está lleno de estas advertencias.
(free/mem_per_worker)+150
, ¿dóndefree
está la cantidad de memoria que tendrá después de tener en cuenta las necesidades de otros procesos cuyos requisitos de memoria aumentarán con más carga, ymem_per_worker
es la cantidad máxima de memoria que prevé que requiera cada proceso de trabajo PHP?Tuvimos el mismo problema en nuestros servidores web.
Puede intentar reaparecer el proceso secundario cada X solicitudes, para evitar pérdidas de memoria. Funcionó bien en Apache y FPM, también está comenzando a funcionar bien.
Esto reiniciará un proceso secundario cada 50k solicitudes
fuente