menu
img
  • Головна
  • Проекти
  • Блог
  • Бріф-анкета
  • Контакти
  • eng
img

Налаштування PHP-FPM для високого навантаження – найкращі методи!

Що таке PHP-FPM? Чому це викликає високе навантаження?

PHP-FPM — це менеджер процесів PHP FastCGI. Це демон FastCGI, який дозволяє веб-сайту обробляти високе навантаження. Але іноді ця служба сама по собі викликає високе навантаження.

Щоб усунути проблему, перше, що потрібно зробити, це перевірили журнали помилок PHP-FPM, які доступні в такому місці, як

/var/log/php7.4-fpm.log

Розташування журналів помилок залежить від шляху встановлення та версії PHP. Під час перевірки журналу помилок ми виявили кілька попереджень, подібних до цього.

[12-Nov-2018 11:12:11] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 9 idle, and 89 total children

Це повідомлення означає, що пул PHP-FPM дуже зайнятий і не може впоратися з великим трафіком із наявними параметрами конфігурації.

PHP-FPM може призвести до високого навантаження на сервер з багатьох причин:

  1. Занадто багато процесів, що виконуються через високий трафік або атаки.
  2. Пов'язані служби, такі як MySQL або веб-сервер, які зловживають ресурсами.
  3. Конфігурація PHP-FPM неправильно зіставлена ​​з доступними ресурсами сервера.
  4. Погано закодовані або помилкові програми, які зловживають ресурсами сервера

 

Як виконати налаштування PHP-FPM для високого навантаження

Перше, що зазвичай роблять власники серверів для негайного виправлення, це перезапуск служби PHP-FPM. Але простий перезапуск служби — це лише засіб для лікування, і незабаром ви побачите зростання навантаження.

Коли ми налагоджуємо такі проблеми із завантаженням, ми аналізуємо журнали та продуктивність сервера за певний період часу. Це допомагає нам точно визначити винуватця та вжити швидких заходів для його усунення.

Switch process manager

Менеджер процесів в основному буває трьох типів – динамічний, за вимогою та статичний. Продуктивність служби різко змінюється залежно від цього типу.

У динамічному типі кількість дочірніх процесів встановлюється динамічно на основі параметрів PHP-FPM у файлі conf. Але це тип, який вимагає багато пам’яті.

У статичному типі кількість дочірніх процесів фіксується параметром pm.max_children, але цей тип не є гнучким для сервера зі змінним веб-трафіком. Він також споживає занадто багато пам'яті.

У типі ondemand процеси PHP-FPM породжуються лише на вимогу, на основі трафіку. Цей тип допомагає керувати різним трафіком на серверах з обмеженою пам’яттю. Але накладні витрати збільшуються, коли є так багато коливань трафіку.

Менеджер процесів PHP-FPM визначається після оцінки доступної пам’яті сервера, стрибків трафіку, сторінок веб-сайтів, використання ЦП тощо.

 

Налаштуйте параметри PHP-FPM

PHP-FPM має багато конфігураційних параметрів, які визначають спосіб його роботи. Ці параметри повинні бути визначені на основі доступних ресурсів сервера, таких як оперативна пам’ять і ЦП.

Наприклад, загальна кількість процесів, які виконуються на сервері, буде приблизно = (Загальна кількість ОЗУ/Пам’ять на процес). На сервері з кількома службами всі вони враховуються для процесу налаштування.

Файл конфігурації PHP-FPM буде доступний у /etc/php-fpm.conf або в іншому місці на основі шляху до служби. Вміст файлу буде виглядати так:

listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 150

Деякі з основних параметрів, які ми налаштовуємо на продуктивність:

  • pm.max_children – Це використовується для встановлення загальної кількості дозволених процесів
  • pm.start_servers – Цим визначається кількість дочірніх процесів, створених під час запуску
  • pm.min_spare_servers – Визначає мінімальну кількість неактивних процесів
  • pm.max_spare_servers – Встановлює максимальну кількість неактивних процесів сервера
  • pm.process_idle_timeout – Кількість секунд, протягом яких процес буде активним
  • pm.max_requests – Це встановлює час виконання кожного дочірнього процесу і використовується для припинення витоку пам’яті.

Поширеною помилкою власників серверів є встановлення дуже високих значень для цих параметрів, щоб отримати максимальну продуктивність. Але якщо ресурсів недостатньо, такі високі значення можуть призвести до збою сервера.

Значення параметра «pm.max_children» спочатку визначається на основі ресурсів сервера, трафіку веб-сайту та вмісту сайтів. Інші параметри потім виводяться при подальшому тестуванні.

 

Увімкнути журнал повільних запитів

У випадках, коли з параметрами все в порядку, але існує підозра, що певна програма або сайт викликає високе навантаження, ми вмикаємо параметр повільного журналу в PHP-FPM.

request_slowlog_timeout = 6s
slowlog = /var/log/php-fpm/slowlog-site.log

Файл журналу, згаданий для параметра «slowlog» у файлі конфігурації PHP-FPM, записує запити, виконання яких займає більше 6 секунд.

Аналіз цих запитів дозволяє нам відстежувати та виправляти ресурсомісткі запити та програми на сервері.

 

Керування кількома пулами

PHP-FPM має можливість налаштувати кілька пулів ресурсів для окремих програм. Це допомагає утримувати ресурси для кожної програми та для додаткової безпеки.

Налаштувавши параметри на основі пулу, ми обмежуємо використання всіх ресурсів сервера єдиним пулом. Невикористані пули видаляються для подальшого керування.

 

Налаштування PHP-FPM для високого навантаження – постійний процес!

Налаштування PHP-FPM для найкращої продуктивності — це не просто виправлення шаблону. Конфігурація та параметри служби будуть відрізнятися залежно від потреб сервера та ресурсів.

Під час пікового руху продуктивність буде відрізнятися від звичайних годин. Отже, після виконання налаштувань ми проводимо стрес-тести, щоб побачити, як працює сервіс під час високого навантаження.

Виходячи з продуктивності сервера під час стрес-тесту, ми проводимо подальше тонке налаштування сервісу. Ми також відстежуємо навантаження на сервер протягом певного періоду часу, щоб переконатися, що зміни дійсно допомогли.

У цьому сценарії ми змогли значно зменшити навантаження на сервер, виконавши налаштування PHP-FPM.

Але сама настройка PHP-FPM може не допомогти в певних сценаріях, де винуватцями також є такі служби, як MySQL або веб-сервер. У цих випадках ми виконуємо додаткові завдання, такі як:

  • Тонка настройка сервера MySQL і веб-сервера, такого як Apache і Nginx
  • Обмеження ресурсів сервера на основі служби, програм, користувачів тощо, щоб уникнути збою сервера
  • Налаштування балансувальників навантаження або кластерів для розповсюдження послуг на серверах із високим трафіком
  • Моніторинг сервера 24/7 та проведення періодичних аудитів сервера для виявлення та вирішення проблем вчасно
  • Увімкнення кешування сторінок та оптимізація коду та запитів, щоб уникнути перевантаження сервера програм
img React Native Telegram Channel img Як виправити: Connection refused by port 22 Debian/Ubuntu img Встановлення NGINX и PHP-FPM на Debian 10
img
© 2015-2025 Web4U. Всі права захищені.
img