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

3

Em uma aplicação Web com Nginx e PHP-FPM, tenho notado momentos de lentidão e analisar os logs, eu 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 alguma pesquisa, aponta que aumentaram os valores no arquivo de configuração php.ini, parado e removido o recipiente php e reconstruí-lo , para a configuração definida para um arquivo em um volume teve efeito.

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

Here is my docker-compose.yml

version: '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 arquivo ./php/config/php.ini:

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

E, se eu correr:

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

Eu vejo os mesmos valores no snippet acima.

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

$ php --ini 

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

Eu frito meu cérebro tentando contornar este problema, mas até agora não consegui.

Alguma idéia?

    
por lfalmeida 20.11.2017 / 11:42

1 resposta

2

Eu posso estar errado, mas supondo que você esteja usando as imagens oficiais do PHP, essas configurações pm devem ser colocadas dentro do diretório /usr/local/etc/php-fpm.d/ dentro de um arquivo com extensão conf. De acordo com documentos do PHP, essas configurações são relacionadas ao FPM e, embora usem a sintaxe do php.ini, deve ser colocado em um arquivo diferente, então acredito que suas configurações de pm estão sendo ignoradas. Este Dockerfile em PHP me ajudou a descobrir onde estão esses arquivos conf deveria ser.

Eu checaria se você tem um arquivo /usr/local/etc/php-fpm.d/www.conf dentro do seu contêiner, onde max_children está agora configurado para 5. Se isso é verdade, eu acho que você poderia modificar seu Dockerfile para copiar um novo arquivo www.conf que define um valor mais alto para pm.max_children.

    
por 20.11.2017 / 19:30