Давайте кратко рассмотрим, как лучше настроить PHP-FPM для высокой пропускной способности и низкой задержки.
По умолчанию большинство настроек устанавливают для PHP-FPM PM (диспетчер процессов) значениеdynamic
, и если вы столкнулись с проблемами нехватки памяти, вам также необходимо использоватьondemand
Давайте посмотрим на параметры в документации php.net и представим мой любимый параметр — static:
-
pm = dynamic
: количество дочерних процессов, динамически устанавливаемое в соответствии со следующей конфигурацией.pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers
-
pm = ondemand
: процессы создаются по требованию по запросу, а не динамически, гдеpm.start_servers
Количество процессов, созданных при запуске службы -
pm = static
: количество дочерних процессов задаетсяpm.max_children
Принимать решение
Сходства между PHP-FPM (PM) и CPUFreq
Это кажется немного не по теме, но я хотел бы включить это в нашу тему настройки PHP-FPM.
Мы все столкнулись с медленной проблемой ЦП, будь то ноутбук, виртуальная машина или сервер.
Вы помните настройку частоты процессора? (CPUFreq), который доступен в Linux и Windows, может установить частоту процессора наondemand
для повышения производительности и отклика системы.
Теперь давайте сравним эти описания и найдем сходство:
-
Governor = ondemand
: Быстро и динамично настраивайте частоту ЦП по мере необходимости.Как только появляется задача с расчетом количества ЦП, она сразу запускается на максимальной частоте, и частота будет снижаться при увеличении времени простоя. -
Governor = conservative
: Быстрая и динамическая регулировка частоты ЦП по требованию, более консервативная, чем регулировка по требованию. -
Governor = performance
: всегда работать на максимальной частоте
Дополнительные сведения см. в полном списке параметров регулятора CPUFreq.
Вы заметили сходство?
использоватьpm static
для максимальной производительности
pm static
Настройка во многом зависит от того, сколько свободной памяти есть на вашем сервере.
По сути, если на вашем сервере мало памяти, тоpm ondemand
илиdynamic
Может быть лучший вариант.
Если у вас достаточно памяти, вы можете установитьpm static
чтобы избежать большей части накладных расходов PM.
Другими словами, когда вы занимаетесь математикой, вы должны положитьpm.static
Установите максимальное количество процессов, которые может запустить сервер, и у него не будет проблем с нехваткой памяти или нехваткой кэш-памяти.
На скриншоте выше PHP-FPM настроен какpm = static
а такжеpm.max_children = 100
Оперативной памяти у него 32 ГБ, и на момент скриншота в Google Analytics было около 200 «активных пользователей» (последние 60 секунд).
На этом уровне около70%
Процесс PHP-FPM все еще простаивает.
Это означает, что после того, как PHP-FPM будет установлен на максимальную мощность ресурсов сервера, он не будет заботиться о текущем трафике, а простаивающий процесс останется в сети, ожидая пика трафика для немедленного ответа, вместо ожидания запроса войти перед созданием процесса
мне нужноpm.max_requests
Установите очень высокое значение, так как это рабочий сервер без утечек памяти PHP.
Если вы на 110% уверены в своем текущем и будущем коде PHP, вы можетеpm.max_requests = 0
а такжеpm static
использовать вместе
Когда использовать ondemand и динамический
использоватьpm dynamic
, вы можете получить сообщение об ошибке, подобное следующему:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
Вы можете попробовать настроить конфигурацию pm и все равно увидите ту же ошибку.
при этих обстоятельствах,pm.min
слишком низкий, а поскольку трафик и пики сильно колеблются, используйтеpm dynamic
Может быть трудно настроить
Общая рекомендация – использоватьpm ondemand
. Однако ситуация ухудшится, потому чтоondemand
закроет бездействующие процессы, когда нет трафика, а затем в конечном итоге возникнет та же проблема с накладными расходами, поскольку трафик сильно колеблется (если вы не установите очень, очень длинные тайм-ауты простоя)
Однако если у вас есть несколько пулов процессов pm,pm dynamic
, особенноondemand
это может сэкономить ваше время
В заключение
Когда трафик сильно колеблется, PHP-FPMondemand
а такжеdynamic
Ограничивает пропускную способность из-за присущих накладных расходов. Вам нужно знать свою систему и установить количество процессов PHP-FPM в соответствии с максимальной производительностью сервера.
отpm.max_children
начать, согласноpm dynamic
илиondemand
максимальное использование для установки
Вы заметите, что вpm static
В режиме, поскольку вы держите все в памяти, пики трафика со временем будут вызывать меньшие пики ЦП, а загрузка вашего сервера и средние значения ЦП станут более плавными. Средний размер каждого процесса PHP-FPM, требующего ручной настройки, будет варьироваться.
Прикрепите тестовую диаграмму A/B
Наконец-то надеюсь, что это полезная статья 😁
PHP PHP-FPMнаградаЭта статья была переведена Эндой наНастройка PHP-FPM: использование «pm static» для максимальной производительности
В нем есть некоторые мои собственные взгляды, если есть какие-либо ошибки, пожалуйста, исправьте их~ Спасибо
Если вы считаете, что моя статья полезна для вас, пожалуйста, нажмите кнопку выше, чтобы дать мне вознаграждение
Отсканируйте QR-код, чтобы поделиться этой статьей