Назад | Перейти на главную страницу

Как и где настроить 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.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

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

pm = dynamic
pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.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.