Nginx y PHP-FPM se están quedando sin conexiones


9

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.

Respuestas:


5

¿Ha considerado seguir los buenos consejos proporcionados en el mensaje de registro y aumentar el valor de pm.max_children? Tienes grandes cantidades de RAM libre para acomodarlos.

Para responder tu pregunta:

  • ¿Qué puedo hacer para dejar de quedarme sin conexiones? Proporcione más conexiones o reduzca la cantidad de conexiones que recibe.
  • ¿Por qué sigue ocurriendo esto? Porque sigues quedando sin conexiones.

Lo sentimos, ese error se marcó después de haberlo actualizado a 150 de 100 ... Sí, lo he hecho. ¿A qué configuración debo configurarlo para todo mi carnero?
E3pO

Debe elevarlo a (free/mem_per_worker)+150, ¿dónde freeestá 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, y mem_per_workeres la cantidad máxima de memoria que prevé que requiera cada proceso de trabajo PHP?
womble

4

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.

 pm.max_requests = 50000

Esto reiniciará un proceso secundario cada 50k solicitudes

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.