БлогVPS и облако
SERVER1 Logo Dark Icon
VPS и облако

PHP-FPM на небольшом VPS: с чего начать tuning

Настройка PHP-FPM по метрикам: worker memory, pm.max_children, dynamic vs ondemand, queue, slowlog и реальный запас RAM.

SERVER1.GE3 мин. чтения
PHP-FPM на небольшом VPS: с чего начать tuning

Настройку PHP-FPM на небольшом VPS стоит начинать с memory budget, а не со случайного увеличения `pm.max_children`. Главный вопрос - сколько одновременных PHP-запросов выдержит сервер, сохранив достаточный запас RAM для database, OS и cache.

Сначала измерьте один worker

Посмотрите реальный RSS PHP-FPM процессов под типичной нагрузкой. Если один worker потребляет около 90 MB, двадцать workers могут занять примерно 1.8 GB только под PHP. Это пример, а не универсальная норма - измеряйте своё приложение.

Рабочий memory budget для VPS с 4 GB

КомпонентЗачем ему RAM
OS + system servicesбазовая работа и headroom
Databasebuffers, cache, connections
PHP-FPMworker count × реальный RSS
Cache / monitoring / panelдополнительный постоянный overhead

гайд по оптимизации WordPress полезен потому, что tuning workers не исправит тяжёлый plugin или плохой query. статья о выборе database server помогает учесть другого крупного потребителя RAM.

dynamic или ondemand?

dynamic

Хорошая отправная точка для меняющегося web traffic, если spare workers и limits выставлены по измерениям.

ondemand

Может быть удобен при низком или нерегулярном traffic, когда хочется уменьшить память idle workers.

Как найти реальный предел

  1. измерьте peak concurrency;
  2. посмотрите request duration;
  3. следите за queue и событиями `max_children reached`;
  4. одновременно проверяйте swap, DB latency и CPU;
  5. меняйте один параметр и измеряйте снова.

На Unmanaged VPS такой tuning полностью входит в вашу ответственность. Если хотите передать операции с OS и web stack, сравните с Managed VPS и уточните границу performance tuning.

Простая формула - только начальная оценка

Верхнюю границу можно приблизительно оценить так:

RAM, доступная PHP ÷ средний RSS одного реального worker = теоретическое количество workers.

Не копируйте это число напрямую в `pm.max_children`. Нужен headroom для traffic spikes, роста DB memory, OS page cache и дорогих requests. Production limit обычно должен быть ниже чисто теоретического максимума.

Какой metric на что указывает?

СигналВозможная причина
`max_children reached`низкий concurrency limit или слишком долгие requests
queue растёт, CPU свободенworker limit или blocking operation
растёт swapworkers, DB и cache вместе превышают RAM
CPU насыщен и queue растётдобавление workers может ухудшить ситуацию
несколько requests очень медленныеважнее slowlog/application profiling

FPM status и slowlog - часть tuning

Настройка - это не только `top`. FPM status показывает active/idle workers, queue и saturation process manager. Slowlog помогает увидеть PHP call path запросов, которые работают слишком долго.

24-часовой tuning cycle

  1. зафиксируйте baseline в реальный peak;
  2. измените один основной parameter;
  3. наблюдайте такой же traffic pattern;
  4. сравните p95 response time, queue, CPU, RAM и errors;
  5. сделайте rollback, если стало хуже.

Главная ошибка - путать capacity problem с application problem. Если один request работает три секунды из-за плохого query, больше workers просто запустят больше медленных requests одновременно.

SERVER1.GE

Не уверены, какая инфраструктура подходит для этой нагрузки?

Расскажите, что вы запускаете, какой трафик ожидаете и какая инфраструктура используется сейчас. Мы поможем сузить выбор.

Спросить SERVER1