Я пытаюсь включить динамическое управление процессами для php-fpm v7.3. Вот мой php-pm.ini
[www]
pm = dynamic
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 498
Проблема в том, что я не могу подтвердить, что мой fpm видит изменения. Я вижу, что он анализирует ini-файл:
$ docker-compose exec web php -i | grep "pm."
Additional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/php-pm.ini
Глядя на службу phpinfo ()
от fpm, я не вижу ни одного из pm.
настройки у всех. Как я могу убедиться, что эти настройки подбираются? И если они есть, но не отображаются здесь, как я могу доказать это?
Вы не увидите эти настройки с php -i
, потому что это скорее настройки, связанные с кодом. Попробуйте установить pm.status_path = / status
, а затем перейдите по URL-адресу http: // localhost / status , и там вы увидите свои параметры php-fpm.
также вы можете посмотреть список процессов, чтобы увидеть, какой файл конфигурации в настоящее время используется с командой ps aux | grep php-fpm | grep master
, или вы увидите его в выводе команды php-fpm -t
.
Конечно, вы должны передать его в свой док-контейнер.
Редактировать OP / Webnet
Это решение помогло мне частично решить эту проблему, но были и другие части, которые помогли мне решить эту проблему. Поскольку это привело меня к начальному пути, я хочу убедиться, что patok получил признание, поэтому я расширю решение здесь.
Вместо того, чтобы загружать дополнительный файл ini через / usr / local / etc / php / conf .d /
, мне нужно было изменить конфигурацию fpm на /usr/local/etc/php-fpm.d/www.conf
внутри моего контейнера (вы можете добавить дополнительный ] .conf
файл, если хотите, но я этого не сделал). Добавление этого в файл докеров выполнило задачу:
RUN sed -i -e 's/pm = .+?/pm = dynamic/' \
-e 's/pm\.max_children = \d/pm\.max_children = 35/' \
-e 's/pm\.start_servers = \d/pm\.start_servers = 10/' \
-e 's/pm\.min_spare_servers = \d/pm\.min_spare_servers = 5/' \
-e 's/pm\.max_spare_servers = \d/pm\.max_spare_servers = 20/' \
-e 's/pm\.max_requests = \d/pm\.max_requests = 500/' \
-e 's/pm\.process_idle_timeout = .+?/pm\.process_idle_timeout = 10s/' \
/usr/local/etc/php-fpm.d/www.conf
Я смог подтвердить, что это решение работает, следуя методам, изложенным в PHP-FPM: Управление процессами , которые включали использование ab -n 10000 -c 200 http: //localhost/index.php
для имитации 10 тыс. Запросов к моему сайту, что позволяет мне использовать docker-compose exec web ps aux | grep php-fpm
(как упомянул patok), чтобы убедиться, что количество процессов fpm действительно было увеличено для обработки нагрузки.