Що таке PHP-FPM і як він обробляє запити
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: PHP-FPM (FastCGI Process Manager) — це менеджер процесів, які виконують код PHP на сервері. Він працює разом із вебсервером і керує робочими процесами, які можуть обробляти наступні запити без повторного запуску інтерпретатора щоразу. Це допомагає ефективно обслуговувати сайти, наприклад на базі WordPress, але саме по собі не гарантує швидшого завантаження — значення мають також код застосунку, база даних і доступні ресурси.
Як PHP-FPM обробляє запит сторінки
Коли користувач відкриває сторінку, що потребує виконання коду PHP, запит спочатку надходить до вебсервера, наприклад Nginx або Apache. Сервер передає завдання до PHP-FPM через FastCGI — протокол обміну даними між вебсервером і процесом, який виконує застосунок. PHP-FPM призначає запит робочому процесу, а результат виконання коду повертається до вебсервера, а потім до браузера.
Робочий процес — це запущений процес PHP, готовий виконати скрипт. Після обробки запиту він зазвичай залишається доступним для наступного, а не завершує роботу одразу. Завдяки цьому не потрібно щоразу витрачати ресурси на запуск нового інтерпретатора, як у класичному CGI.
Наприклад, відкриття динамічної сторінки на WordPress може потребувати запуску PHP, читання даних із бази та генерування HTML. PHP-FPM відповідає за виконання коду PHP, а не за всі етапи доставлення сторінки. Файли CSS, зображення та інші статичні ресурси вебсервер зазвичай обслуговує без його участі.
Чим PHP-FPM відрізняється від PHP і вебсервера
PHP — це мова та середовище виконання коду, а PHP-FPM керує процесами цього середовища. Це не окрема мова, не система керування вмістом і не заміна Nginx або Apache. Ці компоненти виконують різні функції та можуть працювати разом.
Nginx передає виконання скриптів PHP зовнішньому механізму, яким часто є PHP-FPM. Apache також може використовувати PHP-FPM, хоча трапляються й конфігурації з модулем mod_php, який виконує PHP усередині процесів Apache. Тому не варто вважати, що всі сервери з PHP працюють однаково.
PHP-FPM також не замінює OPcache. OPcache зберігає скомпільований код PHP у пам’яті, зменшуючи потребу в повторному розборі та компіляції файлів. PHP-FPM керує процесами, а OPcache скорочує частину роботи, яку вони виконують, — ці два рішення можуть доповнювати одне одного.
Коли PHP-FPM допомагає, а чого не виправить
PHP-FPM дає змогу контролювати кількість процесів, їх запуск і повторне створення. Це допомагає пристосувати обслуговування застосунку до ресурсів сервера та кількості одночасних запитів. Однак це не означає, що його ввімкнення завжди дасть помітний приріст швидкості порівняно з будь-яким іншим правильно налаштованим способом виконання PHP.
Якщо інтернет-магазин довго чекає на виконання повільного запиту до бази даних, сам PHP-FPM не прискорить цей запит. Так само він не усуне затримок зовнішнього API чи ресурсомістких операцій, які виконує плагін. Збільшення кількості процесів може навіть посилити перевантаження бази або вичерпати пам’ять.
Значення має й кешування повних сторінок. Якщо готовий HTML можна повернути без запуску PHP, такий запит не займає процес PHP-FPM. Інакше відбувається обробка кошика, панелі адміністрування чи персоналізованої сторінки, де виконання коду може бути необхідним.
Найважливіші налаштування процесів
PHP-FPM об’єднує процеси в пули — окремо налаштовані групи робочих процесів. Пули можуть мати різні ліміти й працювати з правами різних системних користувачів, що полегшує розділення застосунків. Проте сам поділ на пули не забезпечує повної ізоляції з погляду безпеки.
Режим роботи процесів визначає налаштування pm:
static— підтримує сталу кількість процесів; їхню кількість легко передбачити, але вони займають пам’ять навіть за малого трафіку.dynamic— змінює кількість процесів у заданих межах і підтримує запас вільних процесів.ondemand— запускає процеси з надходженням запитів і завершує їх після періоду бездіяльності; зменшує споживання пам’яті під час простою, але після перерви потребує запуску процесів.
Параметр pm.max_children визначає максимальну кількість робочих процесів у пулі, а отже, і кількість запитів PHP, які пул може виконувати одночасно. Коли всі процеси зайняті, наступні запити можуть чекати в черзі. Надто довге очікування або перевантаження може призвести до помилки.
Наприклад, за ліміту 10 процесів одинадцять одночасних запитів, що потребують PHP, не виконуватимуться всі водночас. Однак це не означає обмеження в 10 користувачів сайту: користувач займає процес лише під час обробки конкретного запиту, а не протягом усього перегляду сайту.
Як перевірити, чи потрібно змінювати конфігурацію
На спільному хостингу налаштуваннями PHP-FPM зазвичай керує провайдер. У панелі вам може бути доступний лише вибір версії PHP та окремих лімітів. Наявність PHP-FPM, доступні налаштування й обмеження ресурсів уточніть у документації або службі технічної підтримки хостингу.
На власному сервері почніть із вимірювань, а не зі збільшення лімітів. Перевірте, чи досягає пул ліміту pm.max_children, скільки пам’яті споживають процеси під навантаженням і чи мають процесор та база даних запас продуктивності. Журнал повільних запитів PHP-FPM після належного налаштування може допомогти виявити код, який довго виконується.
Практичний наступний крок: виберіть одну повільну операцію, наприклад відкриття кошика, і з’ясуйте, що спричиняє затримку — очікування вільного процесу чи саме виконання застосунку. Лише цей результат дасть підстави змінювати ліміти PHP-FPM або працювати над кодом і базою даних.
Дивіться також: Що означає www?
