Настройка PHP-FPM: используйте pm static для высокой производительности

PHP
Настройка PHP-FPM: используйте pm static для высокой производительности

Давайте кратко рассмотрим, как лучше настроить 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Установите максимальное количество процессов, которые может запустить сервер, и у него не будет проблем с нехваткой памяти или нехваткой кэш-памяти.

1509365223linux_top_php-fpm-using-static-pm

На скриншоте выше 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, вы можете получить сообщение об ошибке, подобное следующему:

Bash
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
1509365219php-fpm-pm-bench

Наконец-то надеюсь, что это полезная статья 😁

Эта статья была переведена Эндой наНастройка PHP-FPM: использование «pm static» для максимальной производительности

В нем есть некоторые мои собственные взгляды, если есть какие-либо ошибки, пожалуйста, исправьте их~ Спасибо

PHP PHP-FPMнаграда

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

Отсканируйте QR-код, чтобы поделиться этой статьей