
Meu servidor executa 10 sites, tráfego muito baixo. Configuração:
- Ubuntu 20.04.5LTS
- Nginx 1.18.0 (Ubuntu)
- PHP7.4.3
Emnginx.confisto é adicionado:
upstream local_php {
server unix:/run/php/php7.4-fpm.sock;
}
Emhabilitado para sitesos arquivos de configuração têm locais que incluem:
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass local_php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
Meu/etc/php/7.4/fpm/pool.d/www.conftem:
pm = ondemand
pm.max_children = 15
pm.max_requests = 10
Agora o que acontece é que meus sites estão funcionando bem, mas o arquivo de log do php mostra que o número de filhos ativos está aumentando constantemente. Depois de um ou dois dias, chega a 15 e o PHP para de funcionar. Olhando para a lista de processos, há crianças de todas as “idades” que parecem viver sem propósito. Não há avisos no arquivo de log do PHP, apenas este, quando max_children
é atingido:
WARNING: pid 75057, fpm_pctl_on_socket_accept(), line 518: [pool www] server reached max_children setting (15), consider raising it
Tenho tentado ajustar as configurações do PHP. Com pm = dynamic
, max_children são alcançados muito mais rapidamente. max_requests
foi maior no início, mas baixá-lo não fez diferença significativa. Tenho recursos suficientes para aumentar max_children
um pouco, mas isso só adia o problema, não resolve.
Observe que meu servidor não apresenta problemas de carregamento. O uso de memória nunca excede 35% e a CPU permanece estável em 5%.
Devo estar fazendo algo errado, porque suponho que as crianças deveriam ser mortas em algum momento, não deveriam?O log do PHP diz que crianças estão sendo mortas, mas isso sempre diminui a contagem de crianças sobressalentes, nunca de crianças ativas:
DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 2 spare children
DEBUG: pid 232350, fpm_got_signal(), line 82: received SIGCHLD
DEBUG: pid 232350, fpm_event_loop(), line 435: event module triggered 1 events
DEBUG: pid 232350, fpm_children_bury(), line 261: [pool www] child 289966 has been killed by the process management after 12.069386 seconds from start
DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 1 spare children
DEBUG: pid 232350, fpm_got_signal(), line 82: received SIGCHLD
DEBUG: pid 232350, fpm_event_loop(), line 435: event module triggered 1 events
DEBUG: pid 232350, fpm_children_bury(), line 261: [pool www] child 289969 has been killed by the process management after 12.665847 seconds from start
DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 0 spare children
Lista típica de processos com crianças de até 15 anos:
1390 vps@vps9029:/etc/php/7.4/fpm/pool.d $ ps -elf|grep php
4 S root 15528 15439 0 80 0 - 2397 - Dec20 pts/1 00:00:00 sudo tail -f php7.4-fpm.log
4 S root 15537 15528 0 80 0 - 1378 - Dec20 pts/1 00:00:12 tail -f php7.4-fpm.log
4 S root 75057 1 0 80 0 - 59077 - Dec21 ? 00:00:26 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
5 S www-data 94817 75057 0 80 0 - 84357 - Dec21 ? 00:00:00 php-fpm: pool www
5 S www-data 104885 75057 0 80 0 - 84302 - Dec21 ? 00:00:00 php-fpm: pool www
5 S www-data 125566 75057 0 80 0 - 66282 - Dec21 ? 00:00:01 php-fpm: pool www
5 S www-data 143879 75057 0 80 0 - 65617 - 02:47 ? 00:00:00 php-fpm: pool www
5 S www-data 149198 75057 0 80 0 - 84441 - 03:56 ? 00:00:00 php-fpm: pool www
5 S www-data 149632 75057 0 80 0 - 84582 - 04:02 ? 00:00:08 php-fpm: pool www
5 S www-data 152959 75057 0 80 0 - 84515 - 04:43 ? 00:00:01 php-fpm: pool www
5 S www-data 178687 75057 0 80 0 - 65673 - 09:53 ? 00:00:00 php-fpm: pool www
5 S www-data 182987 75057 0 80 0 - 84178 - 10:46 ? 00:00:00 php-fpm: pool www
5 S www-data 187712 75057 0 80 0 - 84178 - 11:44 ? 00:00:00 php-fpm: pool www
5 S www-data 187713 75057 0 80 0 - 84178 - 11:44 ? 00:00:00 php-fpm: pool www
5 S www-data 197529 75057 0 80 0 - 84386 - 13:59 ? 00:00:00 php-fpm: pool www
5 S www-data 210404 75057 0 80 0 - 65569 - 16:48 ? 00:00:00 php-fpm: pool www
5 S www-data 213858 75057 0 80 0 - 65633 - 17:29 ? 00:00:00 php-fpm: pool www
5 S www-data 214975 75057 0 80 0 - 85465 - 17:44 ? 00:00:00 php-fpm: pool www
Responder1
A causa são solicitações lentas de um dos sites instalados.
Existem algumas configurações FPM/NGINX que controlam a vida dos processos filhos. Estas são minhas configurações agora e parecem manter as crianças sob controle:
Em /etc/php/7.4/fpm/pool.d/www.conf
:
pm = ondemand
pm.max_requests = 10
pm.max_children = 15
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
- request_terminate_timeout_track_finished = sim
Em /etc/php/7.4/fpm/php.ini
:
max_execution_time = 30
default_socket_timeout = 60
Em /etc/nginx/nginx.conf
:
keepalive_timeout 55;
fastcgi_read_timeout 60;