HestiaCP PHP-FPM е под голямо натоварване? Грешка 500 на динамична уеб страница? Тази оптимизация ще влезе в сила веднага!

Сблъсквали ли сте се някога с тази ситуация?Достъпът до уебсайта внезапно се забави или дори доведе до грешка 500. След рестартиране на PHP-FPM той се върна към нормалното., но проблемът се появява отново след известно време? Това е толкова разочароващо!

Защо се случва това?Всъщност това е обикновеноПулът от процеси PHP-FPM не е конфигуриран правилно или ресурсите на сървъра са недостатъчни.причинени от. Днес ще оптимизираме задълбочено HestiaCP PHP-FPM под капака прави уебсайта стабилен като камък!

Основната причина, поради която PHP-FPM е претоварен

PHP-FPM е aМениджър на процеси, който отговаря за обработката на динамични заявки. Ако конфигурацията не е разумна, това може да доведе до:

  • Ресурсите на сървъра са изчерпани, причинявайки PHP-FPM да не може да отговори на нови заявки своевременно;
  • Твърде малко процеси, когато трафикът внезапно се увеличи, той не може да бъде обработен навреме;
  • Използването на процеса е твърде високо, причинявайки експлозия на натоварването на процесора.

HestiaCP PHP-FPM е под голямо натоварване? Грешка 500 на динамична уеб страница? Тази оптимизация ще влезе в сила веднага!

Как да разберете дали PHP-FPM е претоварен?

може да използва tophtop Команда за преглед на използването на процесора и паметта:

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 канал!

Споделете и харесайте, ако ви харесва! Вашите споделяния и харесвания са нашата постоянна мотивация!

 

发表 评论

Вашият имейл адрес няма да бъде публикуван. Използват се задължителните полета * Етикет

Преминете към Top