Каталог статей
- 1 Основна причина, чому PHP-FPM перевантажений
- 2 Оптимізація пулу процесів PHP-FPM (коригування основних параметрів)
- 3 Увімкніть моніторинг стану PHP-FPM, щоб відстежувати прогрес у будь-який час
- 4 Оптимізуйте журнали PHP-FPM для швидкого вирішення проблем
- 5 Регулярно перезапускайте PHP-FPM, щоб запобігти витокам пам’яті
- 6 Що робити, якщо проблема не зникає? Подальша оптимізація!
- 7 Підсумок: оптимізуйте PHP-FPM, і веб-сайт більше не зависатиме!
Ви коли-небудь стикалися з такою ситуацією?Доступ до веб-сайту раптово сповільнився або навіть спричинив помилку 500. Після перезапуску PHP-FPM він повернувся до нормального стану., але через деякий час проблема з’являється знову? Це так засмучує!
Чому це відбувається?Насправді це зазвичайПул процесів PHP-FPM налаштовано неправильно, або ресурсів сервера недостатньо.викликаний. Сьогодні ми будемо ретельно оптимізувати HestiaCP PHP-FPM під капотом робить веб-сайт стабільним, як камінь!
Основна причина, чому PHP-FPM перевантажений
PHP-FPM – це aМенеджер процесів, який відповідає за обробку динамічних запитів. Якщо конфігурація є нерозумною, це може призвести до:
- Ресурси сервера вичерпано, через що PHP-FPM не може своєчасно відповідати на нові запити;
- Замало процесів, коли трафік раптово зростає, він не може бути оброблений вчасно;
- Використання процесу занадто велике, що спричиняє різке навантаження на ЦП.

Як визначити, чи PHP-FPM перевантажений?
можна використовувати top 或 htop Команда для перегляду використання ЦП і пам'яті:
top -c
Якщо ви бачите інформацію про процес, подібну до наведеної нижче, це означає, що PHP-FPM працює під високим навантаженням:
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
Бачите, як ці процеси займають понад 70% ЦП? Якщо це трапляється часто, ваш PHP-FPM Має бути проблема!
Отже, як ми можемо оптимізувати конфігурацію PHP-FPM, щоб сервер більше не перевантажувався?
Оптимізація пулу процесів PHP-FPM (коригування основних параметрів)
Спочатку відкрийте php-fpm Конфігураційні файли:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Змініть версію PHP на вашу, наприклад, PHP8.3, і змініть її на цю:
/etc/php/8.3/fpm/pool.d/www.conf
Запит версії PHP, встановленої HestiaCP
v-list-web-domain user domain.com
E.g:
v-list-web-domain abc chenweiliang.com
У вихідних даних ви побачите щось на зразок:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Це означає, що сайт використовує PHP 8.3.
Давайте розглянемо вашу конфігурацію PHP-FPM:
[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
Ви можете бачити, що ваш pm Той, що використовується ondemand,Незважаючи на те, що це може зменшити використання ресурсів під час простою, коли трафік раптово зростає, процес може не зреагувати вчасно., що призводить до помилки 500.
1. Налаштуйте параметри пулу процесів PHP-FPM
Якщо конфігурація використовує dynamicЦе метод попереднього запуску деяких робочих процесів та їх динамічного налаштування відповідно до обсягу запитів, що дозволяє швидше реагувати, коли обсяг запитів раптово збільшується.
Для веб-сайтів з певним обсягом трафіку рекомендується використовувати pm = dynamicОскільки він може підтримувати певну кількість простоїв процесів та уникати 500 помилок під час високої паралельності.
Рекомендується використовувати його лише тоді, коли обсяг доступу надзвичайно низький, а ресурси пам'яті обмежені. pm = ondemand Щоб заощадити ресурси.
Запропоновано ondemand, і оптимізувати pm.max_children І інші параметри:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
Чому ви хочете це змінити?
pm = dynamic: розподіляйте процеси більш гнучко, щоб уникнути очікування запиту, яке може бути викликане ondemand;pm.max_children = 16: запобігти 500 помилкам, викликаним занадто малою кількістю процесів;pm.start_servers = 5: уникайте повільного запуску процесу;pm.max_requests = 3000:Запобігання витоку пам'яті, регулярно переробляйте процес.
2. Обмежте час виконання сценаріїв PHP, щоб запобігти довгостроковій зайнятості
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Це може завадити деякимСценарії PHP, які використовують занадто багато ЦП, можуть вивести з ладу ваш сервер.
Після збереження перезапустіть процес PHP:
sudo systemctl restart php8.3-fpmУвімкніть моніторинг стану PHP-FPM, щоб відстежувати прогрес у будь-який час
Увімкніть моніторинг процесу PHP-FPM і переглядайте його в будь-який часПоточна кількість активних процесів і статус очікування запиту, щоб уникнути перевантаження сервера.
在 php-fpm.conf Додано в:
pm.status_path = /status
Потім налаштування Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
Таким чином, ви можете http://yourdomain.com/status Перевірте PHP-FPM у дії!
Оптимізуйте журнали PHP-FPM для швидкого вирішення проблем
在 php-fpm.conf 添加:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
Таким чином, щоразу, коли виникає помилка 500, ви можете безпосередньо переглядати журнал:
tail -f /var/log/php-fpm/error.log
Подивіться, чи PHP повідомляє про помилку, наприклад out of memory,script execution timeout Зачекайте.
Регулярно перезапускайте PHP-FPM, щоб запобігти витокам пам’яті
здатний пройти cron Регулярно перезапускайте PHP-FPM, щоб запобігти довготривалим процесамВитоки пам'яті.
crontab -e
Додайте наступне заплановане завдання для автоматичного перезапуску PHP-FPM щодня о 3 ранку:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Що робити, якщо проблема не зникає? Подальша оптимізація!
Якщо ви все ще дотримуєтесь наведеної вище оптимізаціїІноді трапляється 500 помилок, ви можете продовжити такі оптимізації:
1. Увімкніть OPcache, щоб покращити ефективність виконання PHP
Якщо OPcache ще не ввімкнено, ви можете встановити його таким чином (на прикладі Ubuntu):
sudo apt install php8.3-opcache -y
потім редагувати php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Ефект? Швидкість виконання PHP-сторінки значно покращено!
2. Оптимізація конфігурації Nginx
Переконайтеся, що пов’язані з Nginx параметри розумні, наприклад fastcgi_read_timeout Налаштуйте це належним чином, щоб уникнути завершення PHP-скриптів Nginx через тривалий час виконання:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Підсумок: оптимізуйте PHP-FPM, і веб-сайт більше не зависатиме!
Які корективи ми внесли після цієї оптимізації?
✅ Оптимізація пулу процесів PHP-FPM, використовувати ondemandІ оптимізувати pm.max_children параметр;
✅ Обмеження часу виконання скриптів PHP, щоб запобігти довгостроковій зайнятості ЦП;
✅ Увімкнути моніторинг PHP-FPM, переглядати завантаження процесу в реальному часі;
✅ Оптимізація журналів PHP-FPM, швидко усунути 500 помилок;
✅ Регулярно перезапускайте PHP-FPM, запобігати витоку пам'яті;
✅ Увімкніть OPcache, підвищити ефективність виконання PHP;
✅ Оптимізація конфігурації Nginx, щоб уникнути проблем з тайм-аутом.
Після цієї оптимізації навантаження на PHP-FPM значно зменшиться, а робота сайту буде стабільнішою! 🔥
Спробуйте зараз! 💪🚀
Блог Hope Chen Weiliang ( https://www.chenweiliang.com/ ) поділився «Навантаження PHP-FPM на HestiaCP занадто велике? Помилка динамічної веб-сторінки 500? Ця оптимізація почне діяти негайно! », це може бути вам корисно.
Ласкаво просимо поділитися посиланням на цю статтю:https://www.chenweiliang.com/cwl-32512.html
Щоб розкрити більше прихованих хитрощів🔑, приєднуйтесь до нашого Telegram-каналу!
Поділіться та поставте лайк, якщо вам подобається! Ваші розповсюдження та вподобання — наша постійна мотивація!