Como e onde configurar o pm.max_children para php-fpm com Docker?

Em um aplicativo da Web com Nginx e PHP-FPM, notei momentos de lentidão e analisando os logs, encontrei esta mensagem, que aparece de vez em quando:

[19-Nov-2017 19:24:09] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

Depois de alguns reseach, eu aumentei os valores no php.arquivo de configuração do ini, parou e removeu o contêiner php e reconstruí - lo, para a configuração definida como um arquivo em um volume teve efeito.

Analisando o arquivo de configuração dentro do contêiner, é com os novos valores que defini, no entanto, a mensagem de erro sobre pm.max_children (5) continua a aparecer.

Here is my docker-compose.ymlversion: '2'services:               pi_web:        build: ./nginx        ports:            - "80:80"            - "443:443"        volumes:            - ../src:/src            - ./nginx/conf.d:/etc/nginx/conf.d            - ./nginx/nginx.conf:/etc/nginx/nginx.conf            - /etc/letsencrypt:/etc/letsencrypt    pi_php:        build: ./php        volumes:            - ../src:/src            - ./php/config/php.ini:/usr/local/etc/php/php.ini

Aqui está um trecho do ./ php / config / php.ini:

pm = dynamicpm.max_children = 40pm.start_servers = 15pm.min_spare_servers = 15pm.max_spare_servers = 25

E, se eu correr:

$ docker exec -it docker_pi_php_1 cat /usr/local/etc/php/php.ini

Vejo os mesmos valores no trecho acima.

O caminho para o arquivo de configuração dentro do contêiner está correto, eu corri:

$ php --ini 

dentro do contêiner e o caminho está na lista de arquivos de configuração carregados.

Fritei meu cérebro tentando contornar esse problema,mas até agora não consegui.

Alguma ideia?

Posso estar errado, mas supondo que você esteja usando as imagens oficiais do PHP, essas configurações de pm devem ser colocadas dentro do /usr/local/etc/php-fpm.d/ diretório dentro de um arquivo com extensão conf. De acordo com PHP docs, essas configurações são FPM relacionados e embora eles usem php.ini sintaxe, eles devem ser colocados em um arquivo diferente, então acredito que suas configurações pm estão sendo ignoradas. Presente Dockerfile em PHP ajudou eu para descobrir onde deveriam estar esses arquivos conf.

Eu verificaria se você tem um /usr/local/etc/php-fpm.d/www.conf arquivo dentro do seu contêiner onde isso max_children agora está definido para 5. Se for assim, acho que você pode modificar seu Dockerfile para copiar um novo www.arquivo conf que define um valor maior para pm.max_children.

Acho mais claro substituir configurações específicas usando o arquivo que vem com o oficial php:7.3-fpm imagem: /usr/local/etc/php-fpm.d/zz-docker.conf

Este arquivo termina com algo como:

[www]listen = 9000

Portanto, podemos apenas anexá-lo exatamente com o que precisamos definir para o pool www.

Por exemplo:

# SETUP PHP-FPM CONFIG SETTINGS (max_children / max_requests)RUN echo 'pm.max_children = 15' >> /usr/local/etc/php-fpm.d/zz-docker.conf && \    echo 'pm.max_requests = 500' >> /usr/local/etc/php-fpm.d/zz-docker.conf

Acho que é mais simples e claro.