Vai HestiaCP PHP-FPM ir liela slodze? Dinamiskās tīmekļa lapas 500 kļūda? Šī optimizācija stāsies spēkā nekavējoties!

Vai esat kādreiz saskāries ar šo situāciju?Piekļuve vietnei pēkšņi palēninājās vai pat izraisīja 500 kļūdu. Pēc PHP-FPM restartēšanas tā atgriezās normālā stāvoklī., bet problēma atkal parādās pēc kāda laika? Tas ir tik kaitinoši!

Kāpēc tas notiek?Patiesībā tas parasti irPHP-FPM procesu pūls nav pareizi konfigurēts vai servera resursi nav pietiekami.izraisīja. Šodien mēs rūpīgi optimizēsim HestiaCP PHP-FPM zem ​​pārsega padara vietni stabilu kā klints!

Galvenais iemesls, kāpēc PHP-FPM ir pārslogots

PHP-FPM ir aProcesu vadītājs, kas ir atbildīgs par dinamisko pieprasījumu apstrādi. Ja konfigurācija nav saprātīga, tas var izraisīt:

  • Servera resursi ir izsmelti, izraisot PHP-FPM nespēju laicīgi atbildēt uz jauniem pieprasījumiem;
  • Pārāk maz procesu, kad pēkšņi palielinās satiksme, to nevar savlaicīgi apstrādāt;
  • Procesa lietojums ir pārāk augsts, izraisot CPU slodzes eksploziju.

Vai HestiaCP PHP-FPM ir liela slodze? Dinamiskās tīmekļa lapas 500 kļūda? Šī optimizācija stāsies spēkā nekavējoties!

Kā noteikt, vai PHP-FPM ir pārslogots?

var izmantot top Vai htop Komanda, lai skatītu CPU un atmiņas lietojumu:

top -c

Ja redzat tālāk norādītajam līdzīgu procesa informāciju, tas nozīmē, ka PHP-FPM darbojas ar lielu slodzi:

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

Vai redzat, kā šie procesi aizņem vairāk nekā 70% no CPU? Ja tas notiek bieži, jūsu PHP-FPM Jābūt problēmai!

Tātad, kā mēs varam optimizēt PHP-FPM konfigurāciju, lai serveris vairs nebūtu pārslogots?

PHP-FPM procesu kopas optimizācija (pamatparametru pielāgošana)

Vispirms atveriet php-fpm Konfigurācijas faili:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Pārslēdzieties uz savu PHP versiju, piemēram, PHP8.3, un nomainiet to uz šo:/etc/php/8.3/fpm/pool.d/www.conf

Vaicājiet HestiaCP iestatīto PHP versiju

v-list-web-domain user domain.com

E. g .:

v-list-web-domain abc chenweiliang.com

Izvadē jūs redzēsit kaut ko līdzīgu:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Tas nozīmē, ka vietne izmanto PHP 8.3.

Apskatīsim jūsu PHP-FPM konfigurāciju:

[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

Jūs varat redzēt, ka jūsu pm Izmantotais ir ondemand,Lai gan tas var samazināt resursu izmantošanu dīkstāves laikā, pēkšņi pieaugot satiksmei, process var nespēt reaģēt laikā., kā rezultātā tiek parādīta kļūda 500.

1. Pielāgojiet PHP-FPM procesu pūla parametrus

Ja konfigurācija izmanto dynamicŠī ir metode, kas ļauj iepriekš sākt dažus darba procesus un dinamiski pielāgot tos atbilstoši pieprasījumu apjomam, kas var ātrāk reaģēt, kad pieprasījumu apjoms pēkšņi palielinās.

Tīmekļa vietnēm ar noteiktu apmeklētāju skaitu ieteicams izmantot pm = dynamicJo tas var uzturēt noteiktu daudzumu dīkstāves procesu un izvairīties no 500 kļūdām augstas vienlaicības laikā.

Ieteicams to izmantot tikai tad, ja piekļuves apjoms ir ārkārtīgi mazs un atmiņas resursi ir ierobežoti. pm = ondemand Lai taupītu resursus.

Ieteicams ondemandun optimizēt pm.max_children Un citi parametri:

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 后自动退出

Kāpēc jūs vēlaties to mainīt šādi?

  • pm = dynamic: elastīgāk piešķiriet procesus, lai izvairītos no pieprasījuma gaidīšanas, ko var izraisīt pieprasījums;
  • pm.max_children = 16: Novērst 500 kļūdas, ko izraisa pārāk maz procesu;
  • pm.start_servers = 5: Izvairieties no lēnas procesa palaišanas;
  • pm.max_requests = 3000:Atmiņas noplūdes novēršana, regulāri pārstrādājiet procesu.

2. Ierobežojiet PHP skriptu izpildes laiku, lai novērstu ilgstošu noslogojumu

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Tas var novērst dažusPHP skripti, kas izmanto pārāk daudz CPU, var sabojāt jūsu serveri.

Pēc saglabāšanas restartējiet PHP procesu:

sudo systemctl restart php8.3-fpm

Iespējojiet PHP-FPM statusa uzraudzību, lai jebkurā laikā sekotu progresam

Iespējojiet PHP-FPM procesa uzraudzību un skatiet to jebkurā laikāPašreizējais aktīvo procesu skaits un pieprasījuma gaidīšanas statuss, lai izvairītos no servera pārslodzes.

php-fpm.conf Pievienots:

pm.status_path = /status

Pēc tam Nginx konfigurācija:

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;
}

Tādā veidā jūs varat http://yourdomain.com/status Pārbaudiet PHP-FPM darbībā!

Optimizējiet PHP-FPM žurnālus, lai ātri novērstu problēmas

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 的脚本记录到日志

Šādā veidā ikreiz, kad rodas kļūda 500, varat tieši skatīt žurnālu:

tail -f /var/log/php-fpm/error.log

Pārbaudiet, vai PHP ziņo par kļūdu, piemēram, out of memory,script execution timeout Pagaidiet.

Regulāri restartējiet PHP-FPM, lai novērstu atmiņas noplūdes

spējīgs tikt garām cron Regulāri restartējiet PHP-FPM, lai novērstu ilgstošu procesu rašanosAtmiņas noplūdes.

crontab -e

Pievienojiet šādu ieplānoto uzdevumu, lai katru dienu plkst. 3:XNUMX automātiski restartētu PHP-FPM:

0 3 * * * /usr/sbin/service php8.3-fpm restart

Ko darīt, ja problēma joprojām pastāv? Tālāka optimizācija!

Ja joprojām ievērojat iepriekš minēto optimizācijuReizēm rodas 500 kļūdas, varat turpināt šādas optimizācijas:

1. Iespējojiet OPcache, lai uzlabotu PHP izpildes efektivitāti

Ja OPcache vēl nav iespējots, varat to instalēt šādi (izmantojot Ubuntu kā piemēru):

sudo apt install php8.3-opcache -y

Pēc tam rediģējiet php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

Efekts? PHP lapas izpildes ātrums ir ievērojami uzlabots!

2. Nginx konfigurācijas optimizācija

Pārliecinieties, vai ar Nginx saistītie parametri ir saprātīgi, piemēram, fastcgi_read_timeout Pielāgojiet to atbilstoši, lai izvairītos no tā, ka Nginx pārtrauc PHP skriptus ilga izpildes laika dēļ:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Kopsavilkums: Optimizējiet PHP-FPM, un vietne vairs neavārēs!

Kādas korekcijas esam veikuši pēc šīs optimizācijas?

✅ PHP-FPM procesu pūla optimizēšana, izmantot ondemandUn optimizēt pm.max_children parametrs;
PHP skriptu izpildes laika ierobežošana, lai novērstu ilgstošu CPU noslogojumu;
Iespējot PHP-FPM uzraudzību, apskatīt procesa slodzi reāllaikā;
PHP-FPM žurnālu optimizēšana, ātri novērst 500 kļūdas;
Regulāri restartējiet PHP-FPM, novērstu atmiņas noplūdes;
Iespējot OPcache, uzlabot PHP izpildes efektivitāti;
Nginx konfigurācijas optimizēšana, lai izvairītos no taimauta problēmām.

Pēc šīs optimizācijas PHP-FPM slodze ievērojami samazināsies un mājas lapas darbība būs stabilāka! 🔥

Ej un izmēģini tūlīt! 💪🚀

发表 评论

Jūsu e-pasta adrese netiks publicēta. 必填 项 已 用 * Etiķete

Ritiniet uz augšu