PHP-FPM Não é possível criar filhos suficientes e parar de atender solicitações

1

Sou novo no PHP-FPM e percebi que, em intervalos aleatórios, ele aparentemente fica travado.

[26-Dec-2014 22:50:16] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 921 total children
[26-Dec-2014 22:50:17] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 931 total children
[26-Dec-2014 22:50:18] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 941 total children
[26-Dec-2014 22:50:19] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 951 total children
[26-Dec-2014 22:50:20] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 961 total children
[26-Dec-2014 22:50:21] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 971 total children
[26-Dec-2014 22:50:22] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 981 total children
[26-Dec-2014 22:50:23] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 991 total children
[26-Dec-2014 22:50:24] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 1001 total children
[26-Dec-2014 22:50:25] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 1011 total children
[26-Dec-2014 22:50:26] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 1021 total children
[26-Dec-2014 22:50:27] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 1031 total children

Isso acontece de forma aparentemente aleatória (poderíamos ter 50 pessoas no site por minuto ou 200) quando isso acontece, o PHP-FPM para de atender as solicitações (olhando acima parece que não é possível atender à demanda)

Mesmo se eu reiniciar o PHP-FPM, ele permanecerá bloqueado por um curto período.

[26-Dec-2014 22:52:41] NOTICE: Terminating ...
[26-Dec-2014 22:52:41] NOTICE: exiting, bye-bye!
[26-Dec-2014 22:52:41] NOTICE: fpm is running, pid 17484
[26-Dec-2014 22:52:41] NOTICE: ready to handle connections
[26-Dec-2014 22:53:15] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 53 total children
[26-Dec-2014 22:53:16] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 61 total children
[26-Dec-2014 22:53:17] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 71 total children
[26-Dec-2014 22:53:18] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 81 total children
[26-Dec-2014 22:57:01] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 109 total children
[26-Dec-2014 22:58:09] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 124 total children
[26-Dec-2014 22:58:10] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 132 total children
[26-Dec-2014 22:58:11] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 142 total children
[26-Dec-2014 22:58:12] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 152 total children
[26-Dec-2014 22:58:13] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 162 total children
[26-Dec-2014 22:58:14] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 172 total children
[26-Dec-2014 22:58:15] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 182 total children
[26-Dec-2014 22:58:16] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 192 total children
[26-Dec-2014 22:58:17] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 202 total children

Aqui estão minhas configurações

pm.max_children = 2000
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 200
pm.max_requests = 500

Eu já tentei isso também em

pm.max_children = 2000
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 50
pm.max_requests = 500

e algumas outras combinações, mas ainda vemos o problema.

O servidor tem 32 núcleos e 64 GB de memória. Usando o Apache e o FastCGI

Obrigado

    
por James 27.12.2014 / 00:03

1 resposta

1

tente isto:

Nota: usado somente quando o pm está definido como 'dinâmico'

pm.start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2

pm = dynamic
pm.max_children = 500
pm.start_servers = 60
pm.min_spare_servers = 20
pm.max_spare_servers = 100
pm.max_requests = 10000; 

ou assim:

pm = ondemand
pm.max_children = 500
pm.max_requests = 10000

de qualquer maneira, você precisa usar o cache.

    
por 27.12.2014 / 13:06