ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Настройка PHP-FPM для повышения производительности + Low Memory

Настройка PHP-FPM для повышения производительности + Low Memory

PHP-FPM имеет конфигурацию по умолчанию, которая использует больше памяти, чем это необходимо. Она имеет запасные PHP-FPM процессы, готовые запускаться, занимая память в случае, если есть PHP код в обработки. Хотя это и не проблема, если у вас есть тонны оперативной памяти, это может быть проблемой для низкой VPS RAM и если вы используете агрессивное кэширование страниц, то это память используется без необходимости, которая может быть использована для MariaDB (MySQL) или для других важных процессов. Это руководство объясняет, как настроить конфигурацию Nginx с PHP-FPM работающем на PHP 7.0, чтобы использовать как можно меньше оперативной памяти, как это возможно.

Настройка PHP-FPM для повышения производительности + Low Memory

Откройте файл конфигурации PHP-FPM для PHP 7.0.

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

 

Настройте следующие значения, как показано ниже, обратите внимание на ; перед pm.start_servers, pm.min_spare_servers и pm.max_spare_servers.

pm = ondemand означает, что дочерние процессы в PHP-FPM будут порождаться только при необходимости

pm.max_children это максимальное количество дочерних процессов, которые будут разрешены, 50 является достаточно либеральным, но если вы видите в своем архиве журналов что количество дочерних процессов превысило максимальное значение,  то необходимо увеличить это значение

pm.process_idle_timeout убивает дочерние процессы после того, как они бездействовали в течение 10 секунд

pm.max_requests устанавливает максимальное количество запросов PHP для каждого дочернего процесса

pm = ondemand

; Число дочерних процессов, которые будет создано, когда pm установлен в 'static' и
; Максимальное число дочерних процессов, когда pm установлен в 'dynamic' и 'ondemand'.
; Это значение устанавливает ограничение на количество одновременных запросов, которые будут
; запускаться. Эквивалент директивы ApacheMaxClients в mpm_prefork.
; Эквивалентная переменная среды PHP_FCGI_CHILDREN в оригинальном PHP
; CGI. Ниже, по умолчанию основаны на сервере без использования значительных ресурсов. Не
; забудьте настройки часов.* чтобы соответствовать вашим потребностям.
; Примечание: используется, когда pm установлен в 'static', 'dynamic' или 'ondemand'
; Примечание: это значение является обязательным.
pm.max_children = 50

; Число дочерних процессов, созданных при запуске.
; Примечание: используется только тогда, когда pm установлен в "dynamic"
; Значение по умолчанию: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
;pm.start_servers = 2

; Требуемое минимальное число неактивных процессов сервера.
; Примечание: используется только тогда, когда pm установлен в "dynamic"
; Примечание: обязательное, когда pm установлен в "dynamic"
;pm.min_spare_servers = 1

; Требуемое максимальное число неактивных процессов сервера.
; Примечание: используется только тогда, когда pm установлен в "dynamic"
; Примечание: обязательное, когда pm установлен в "dynamic"
;pm.max_spare_servers = 3

; Число секунд, по истечении которых бездействующий процесс будет убит.
; Примечание: используется только тогда, когда pm установлен в 'ondemand'
; Значение по умолчанию: 10s
pm.process_idle_timeout = 10s;

; Число запросов после которых дочерний процесс будет перезапущен.
; Это может быть полезно во избежания утечек памяти в 3-й партии библиотек. Для
; бесконечной обработки запроса укажите '0'. Эквивалент PHP_FCGI_MAX_REQUESTS.
; Значение по Умолчанию: 0
pm.max_requests = 500

 

Проверьте правильность вашего синтаксиса конфигурации PHP-FPM

php-fpm7.0 -t

 

Вы должны увидеть, что конфигурация действует

[01-Jun-2017 15:51:34] NOTICE: configuration file /etc/php/7.0/fpm/php-fpm.conf test is successful

 

Теперь вы можете перезапустить php7.0-FPM

sudo service php7.0-fpm restart

 

Вы можете увидеть, что объем оперативной памяти используется значительно меньше.

Exit mobile version