Как и где настроить pm.max_children для php-fpm с помощью Docker?

В веб-приложении с Nginx и PHP-FPM я заметил моменты замедления и, анализируя журналы, обнаружил это сообщение, которое появляется время от времени:

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

После некоторого повторного поиска я увеличил значения в конфигурационном файле php.ini, остановил и удалил контейнер php и перестроил его, чтобы настройка, установленная для файла на томе, имела эффект.

Анализируя конфигурационный файл внутри контейнера, я обнаружил, что он содержит новые значения, которые я установил, однако, продолжает появляться сообщение об ошибке pm.max_children (5).

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

Вот фрагмент файла ./php/config/php.ini:

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

И, если я убегу:

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

Я вижу те же значения в приведенном выше фрагменте кода.

Путь к файлу конфигурации внутри контейнера правильный, я запустил:

$ php --ini 

внутри контейнера и путь находится в списке загруженных файлов конфигурации.

Я изрядно поиздевался, пытаясь обойти эту проблему, но пока мне это не удалось.

Есть какие-нибудь идеи?

Я могу ошибаться, но предполагая, что вы используете официальные изображения PHP, эти настройки pm должны быть размещены внутри /usr/local/etc/php-fpm.d/ каталог внутри файла с расширением conf. Согласно документам PHP, эти настройки являются FPM связанные и хотя они используют php.ini синтаксис, они должны быть помещены в другой файл, поэтому я считаю, что ваши настройки pm игнорируются. Этот Dockerfile в PHP помог мне нужно выяснить, где должны быть эти файлы conf.

Я бы проверил, есть ли у вас /usr/local/etc/php-fpm.d/www.conf файл внутри вашего контейнера, где это max_children теперь установлен на 5. Если это так, я думаю, вы могли бы изменить свой Dockerfile, чтобы скопировать новый www.conf файл, который устанавливает более высокое значение для pm.max_children.

Я нахожу более понятным перезаписывать определенные настройки, используя файл, который поставляется с официальным php:7.3-fpm изображение: /usr/local/etc/php-fpm.d/zz-docker.conf

Этот файл заканчивается чем-то вроде:

[www]listen = 9000

Таким образом, мы можем просто добавить к нему именно то, что нам нужно установить для пула www.

Например:

# 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

Я думаю, что это проще и понятнее.