HestiaCP PHP-FPM er under stor belastning? Dynamisk webside 500-feil? Denne optimaliseringen trer i kraft umiddelbart!

Har du noen gang vært borti denne situasjonen?Nettstedtilgangen ble plutselig redusert, eller til og med resulterte i en 500-feil Etter å ha startet PHP-FPM på nytt, gikk det tilbake til det normale., men problemet dukker opp igjen etter en stund? Dette er så frustrerende!

Hvorfor skjer dette?Faktisk er dette vanligvisPHP-FPM-prosesspoolen er ikke riktig konfigurert, eller serverressursene er utilstrekkelige.forårsaket av. I dag skal vi optimalisere grundig HestiaCP PHP-FPM under panseret gjør nettsiden stabil som en stein!

Kjernegrunnen til at PHP-FPM er overbelastet

PHP-FPM er enProsessleder, som er ansvarlig for å håndtere dynamiske forespørsler. Hvis konfigurasjonen ikke er rimelig, kan det føre til:

  • Serverressursene er oppbrukt, noe som gjør at PHP-FPM ikke kan svare på nye forespørsler i tide;
  • For få prosesser, når trafikken plutselig øker, kan den ikke behandles i tide;
  • Prosessbruken er for høy, noe som får CPU-belastningen til å eksplodere.

HestiaCP PHP-FPM er under stor belastning? Dynamisk webside 500-feil? Denne optimaliseringen trer i kraft umiddelbart!

Hvordan finne ut om PHP-FPM er overbelastet?

kan bruke top eller htop Kommando for å se CPU og minnebruk:

top -c

Hvis du ser prosessinformasjon som ligner på følgende, betyr det at PHP-FPM kjører under høy belastning:

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

Ser du hvordan disse prosessene tar opp over 70 % av prosessoren? Hvis dette skjer ofte, vil PHP-FPM Det må være et problem!

Så hvordan kan vi optimalisere PHP-FPM-konfigurasjonen slik at serveren ikke lenger er overbelastet?

PHP-FPM prosesspooloptimalisering (justering av kjerneparameter)

Først, åpne php-fpm Konfigurasjonsfiler:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Bytt til PHP-versjonen din, for eksempel PHP8.3, og endre den til dette:/etc/php/8.3/fpm/pool.d/www.conf

Spør PHP-versjonen satt av HestiaCP

v-list-web-domain user domain.com

f.eks:

v-list-web-domain abc chenweiliang.com

I utgangen vil du se noe sånt som:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Dette betyr at nettstedet bruker PHP 8.3.

La oss ta en titt på PHP-FPM-konfigurasjonen din:

[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

Du kan se at din pm Den som brukes er ondemand,Selv om det kan redusere ressursbruken under inaktiv tid, når trafikken plutselig øker, kan det hende at prosessen ikke kan svare i tide., noe som resulterer i en 500-feil.

1. Juster PHP-FPM-prosesspoolparametere

Hvis konfigurasjonen bruker dynamicDette er en metode for å forhåndsstarte noen arbeidsprosesser og dynamisk justere dem i henhold til forespørselsvolumet, noe som kan reagere raskere når forespørselsvolumet plutselig øker.

For nettsteder med en viss mengde trafikk anbefales det å bruke pm = dynamicFordi den kan opprettholde en viss mengde inaktive prosesser og unngå 500 feil under høy samtidighet.

Det anbefales å bare bruke det når tilgangsvolumet er ekstremt lavt og minneressursene er knappe. pm = ondemand For å spare ressurser.

Foreslo å ondemand, og optimalisere pm.max_children Og andre parametere:

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

Hvorfor vil du endre det slik?

  • pm = dynamic: Tildel prosesser mer fleksibelt for å unngå forespørselsventing som kan være forårsaket av ondemand;
  • pm.max_children = 16: Forhindre 500 feil forårsaket av for få prosesser;
  • pm.start_servers = 5: Unngå treg prosessoppstart;
  • pm.max_requests = 3000:Forhindre minnelekkasjer, resirkuler prosessen regelmessig.

2. Begrens utførelsestiden for PHP-skript for å forhindre langsiktig bruk

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

Dette kan forhindre noenPHP-skript som bruker for mye CPU kan ødelegge serveren din.

Etter å ha lagret, start PHP-prosessen på nytt:

sudo systemctl restart php8.3-fpm

Aktiver PHP-FPM-statusovervåking for å holde oversikt over fremdriften når som helst

Aktiver PHP-FPM-prosessovervåking og se den når som helstGjeldende antall aktive prosesser og forespørsel om ventestatus, for å unngå overbelastning av serveren.

php-fpm.conf Lagt til i:

pm.status_path = /status

Deretter, Nginx-konfigurasjon:

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

På denne måten kan du http://yourdomain.com/status Sjekk ut PHP-FPM i aksjon!

Optimaliser PHP-FPM-logger for raskt å feilsøke problemer

php-fpm.conf Legg til:

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

På denne måten, når en 500-feil oppstår, kan du se loggen direkte:

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

Se om PHP rapporterer en feil, som f.eks out of memory,script execution timeout 等.

Start PHP-FPM på nytt regelmessig for å forhindre minnelekkasjer

i stand til å passere cron Start PHP-FPM på nytt regelmessig for å forhindre at langvarige prosesser forårsakerMinnelekkasjer.

crontab -e

Legg til følgende planlagte oppgave for automatisk å starte PHP-FPM på nytt klokken 3 hver dag:

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

Hva om problemet vedvarer? Ytterligere optimalisering!

Hvis du fortsatt følger optimaliseringen ovenforAv og til oppstår 500 feil, kan du fortsette med følgende optimaliseringer:

1. Aktiver OPcache for å forbedre PHP-utførelseseffektiviteten

Hvis OPcache ikke er aktivert ennå, kan du installere det slik (ved å bruke Ubuntu som eksempel):

sudo apt install php8.3-opcache -y

Rediger deretter php.ini:

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

Effekt? Utførelseshastigheten for PHP-siden har blitt kraftig forbedret!

2. Nginx-konfigurasjonsoptimalisering

Sørg for at Nginx-relaterte parametere er rimelige, for eksempel fastcgi_read_timeout Juster det riktig for å unngå at PHP-skript blir avsluttet av Nginx på grunn av lang utførelsestid:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Sammendrag: Optimaliser PHP-FPM og nettsiden vil ikke lenger krasje!

Hvilke justeringer har vi gjort etter denne optimaliseringen?

✅ Optimalisering av PHP-FPM-prosesspoolen,bruk ondemandOg optimalisere pm.max_children parameter;
Begrenser utførelsestiden for PHP-skript, for å forhindre langsiktig CPU-okkupasjon;
Aktiver PHP-FPM-overvåking, se prosessbelastningen i sanntid;
Optimalisering av PHP-FPM-logger, feilsøk 500 feil raskt;
Start PHP-FPM på nytt regelmessig, forhindre minnelekkasjer;
Aktiver OPcache, forbedre PHP-utførelseseffektiviteten;
Optimalisering av Nginx-konfigurasjon, for å unngå problemer med tidsavbrudd.

Etter denne optimaliseringen vil PHP-FPM-belastningen reduseres kraftig og driften av nettstedet vil bli mer stabil! 🔥

Prøv det nå! 💪🚀

发表 评论

E-postadressen din vil ikke bli publisert. 必填 项 已 用 * Merkelapp

Rull til toppen