Справочник на статиите
- 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
Напр
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 скриптовете, които използват твърде много CPU, могат да свалят вашия сървър.
След като запазите, рестартирайте 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/ ) сподели „HestiaCP PHP-FPM натоварването е твърде високо? Грешка 500 на динамична уеб страница? Тази оптимизация ще влезе в сила веднага! “, може да ви е полезно.
Добре дошли да споделите връзката към тази статия:https://www.chenweiliang.com/cwl-32512.html
За да отключите още скрити трикове🔑, заповядайте в нашия Telegram канал!
Споделете и харесайте, ако ви харесва! Вашите споделяния и харесвания са нашата постоянна мотивация!