HestiaCP PHP-FPM iko chini ya mzigo mzito? Hitilafu 500 ya ukurasa wa wavuti wenye nguvu? Uboreshaji huu utaanza kutumika mara moja!

Je, umewahi kukutana na hali hii?Ufikiaji wa tovuti ulipungua kwa ghafla, au hata kusababisha hitilafu 500 Baada ya kuanzisha upya PHP-FPM, ilirudi kwa kawaida., lakini tatizo hutokea tena baada ya muda? Hii inakatisha tamaa sana!

Kwa nini hii inatokea?Kwa kweli, hii ni kawaidaDimbwi la mchakato wa PHP-FPM halijasanidiwa ipasavyo, au rasilimali za seva hazitoshi.iliyosababishwa na. Leo, tutaboresha kikamilifu HestiaCP PHP-FPM chini ya kofia hufanya tovuti kuwa thabiti kama mwamba!

Sababu kuu kwa nini PHP-FPM imejaa kupita kiasi

PHP-FPM niMeneja wa Mchakato, ambayo inawajibika kushughulikia maombi yanayobadilika. Ikiwa usanidi sio busara, inaweza kusababisha:

  • Rasilimali za seva zimeisha, na kusababisha PHP-FPM kushindwa kujibu maombi mapya kwa wakati;
  • Michakato michache mno, wakati trafiki inaongezeka kwa ghafla, haiwezi kusindika kwa wakati;
  • Matumizi ya mchakato ni ya juu sana, na kusababisha mzigo wa CPU kulipuka.

HestiaCP PHP-FPM iko chini ya mzigo mzito? Hitilafu 500 ya ukurasa wa wavuti wenye nguvu? Uboreshaji huu utaanza kutumika mara moja!

Jinsi ya kujua ikiwa PHP-FPM imejaa?

inaweza kutumia top Au htop Amri ya kutazama CPU na utumiaji wa kumbukumbu:

top -c

Ukiona maelezo ya mchakato sawa na yafuatayo, inamaanisha PHP-FPM inafanya kazi chini ya mzigo mkubwa:

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

Unaona jinsi michakato hii inavyochukua zaidi ya 70% ya CPU? Hili likitokea mara kwa mara, PHP-FPM yako Lazima kuna tatizo!

Kwa hivyo, tunawezaje kuboresha usanidi wa PHP-FPM ili seva isijazwe tena?

Uboreshaji wa dimbwi la mchakato wa PHP-FPM (marekebisho ya msingi ya parameta)

Kwanza, fungua php-fpm Faili za Usanidi:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Badilisha kwa toleo lako la PHP, kama vile PHP8.3, na ubadilishe kuwa hii:/etc/php/8.3/fpm/pool.d/www.conf

Hoji toleo la PHP lililowekwa na HestiaCP

v-list-web-domain user domain.com

Mfano:

v-list-web-domain abc chenweiliang.com

Katika pato, utaona kitu kama:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Hii ina maana kwamba tovuti hutumia PHP 8.3.

Wacha tuangalie usanidi wako wa 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

Unaweza kuona kwamba yako pm Inayotumika ni ondemand,Ingawa inaweza kupunguza matumizi ya rasilimali wakati wa kutofanya kitu, trafiki inapoongezeka ghafla, mchakato unaweza usiweze kujibu kwa wakati., na kusababisha hitilafu 500.

1. Rekebisha vigezo vya dimbwi la mchakato wa PHP-FPM

Ikiwa usanidi unatumia dynamicHii ni njia ya kuanza kabla ya baadhi ya michakato ya kazi na kurekebisha kwa nguvu kulingana na kiasi cha ombi, ambacho kinaweza kujibu haraka wakati kiasi cha ombi kinaongezeka ghafla.

Kwa tovuti zilizo na kiasi fulani cha trafiki, inashauriwa kutumia pm = dynamicKwa sababu inaweza kudumisha kiasi fulani cha michakato isiyo na kazi na kuepuka makosa 500 wakati wa concurrency ya juu.

Inashauriwa kuitumia tu wakati kiasi cha ufikiaji ni cha chini sana na rasilimali za kumbukumbu zimefungwa. pm = ondemand Ili kuokoa rasilimali.

Imependekezwa ondemand, na kuboresha pm.max_children Na vigezo vingine:

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

Kwa nini unataka kuibadilisha hivi?

  • pm = dynamic: Tenga michakato kwa urahisi zaidi ili kuepuka kusubiri ombi ambalo linaweza kusababishwa na mahitaji;
  • pm.max_children = 16: Zuia makosa 500 yanayosababishwa na michakato michache sana;
  • pm.start_servers = 5: Epuka kuanza polepole kwa mchakato;
  • pm.max_requests = 3000:Kuzuia uvujaji wa kumbukumbu, kuchakata mchakato mara kwa mara.

2. Weka kikomo muda wa utekelezaji wa hati za PHP ili kuzuia umiliki wa muda mrefu

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

Hii inaweza kuzuia baadhiHati za PHP zinazotumia CPU nyingi sana zinaweza kuangusha seva yako.

Baada ya kuhifadhi, anza tena mchakato wa PHP:

sudo systemctl restart php8.3-fpm

Washa ufuatiliaji wa hali ya PHP-FPM ili kufuatilia maendeleo wakati wowote

Washa ufuatiliaji wa mchakato wa PHP-FPM na uitazame wakati wowoteIdadi ya sasa ya michakato inayotumika na ombi hali ya kungojea, ili kuzuia upakiaji wa seva.

katika php-fpm.conf Imeongezwa katika:

pm.status_path = /status

Kisha, usanidi wa 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;
}

Kwa njia hii, unaweza http://yourdomain.com/status Angalia PHP-FPM inavyofanya kazi!

Boresha kumbukumbu za PHP-FPM ili kutatua matatizo kwa haraka

katika php-fpm.conf Ongeza kwa:

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

Kwa njia hii, wakati wowote hitilafu 500 inapotokea, unaweza kutazama logi moja kwa moja:

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

Tazama ikiwa PHP inaripoti kosa, kama vile out of memory,script execution timeout Subiri.

Anzisha upya PHP-FPM mara kwa mara ili kuzuia uvujaji wa kumbukumbu

kuweza kupita cron Anzisha upya PHP-FPM mara kwa mara ili kuzuia michakato inayoendelea kwa muda mrefu kusababishaUvujaji wa Kumbukumbu.

crontab -e

Ongeza kazi ifuatayo iliyoratibiwa ili kuanzisha upya PHP-FPM kiotomatiki saa 3 asubuhi kila siku:

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

Je, ikiwa tatizo litaendelea? Uboreshaji zaidi!

Ikiwa bado unafuata uboreshaji hapo juuMara kwa mara makosa 500 hutokea, unaweza kuendelea na uboreshaji ufuatao:

1. Washa OPcache ili kuboresha ufanisi wa utekelezaji wa PHP

Ikiwa OPcache bado haijawezeshwa, unaweza kuisanikisha kama hii (kwa kutumia Ubuntu kama mfano):

sudo apt install php8.3-opcache -y

Kisha hariri php.ini:

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

Athari? Kasi ya utekelezaji wa ukurasa wa PHP imeboreshwa sana!

2. Uboreshaji wa usanidi wa Nginx

Hakikisha kuwa vigezo vinavyohusiana na Nginx ni sawa, kama vile fastcgi_read_timeout Irekebishe ipasavyo ili kuzuia hati za PHP kukomeshwa na Nginx kwa sababu ya muda mrefu wa utekelezaji:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Muhtasari: Boresha PHP-FPM na tovuti haitaanguka tena!

Je, tumefanya marekebisho gani baada ya uboreshaji huu?

✅ Kuboresha dimbwi la mchakato wa PHP-FPM, tumia ondemandNa uboresha pm.max_children kigezo;
Kupunguza muda wa utekelezaji wa hati za PHP, kuzuia kazi ya muda mrefu ya CPU;
Washa ufuatiliaji wa PHP-FPM, tazama mzigo wa mchakato kwa wakati halisi;
Kuboresha kumbukumbu za PHP-FPM, haraka kutatua makosa 500;
Anzisha upya PHP-FPM mara kwa mara, kuzuia uvujaji wa kumbukumbu;
Washa OPcache, kuboresha ufanisi wa utekelezaji wa PHP;
Kuboresha Usanidi wa Nginx, ili kuepuka masuala ya kuisha.

Baada ya uboreshaji huu, mzigo wa PHP-FPM utapunguzwa sana na uendeshaji wa tovuti utakuwa imara zaidi! 🔥

Nenda ukajaribu sasa! 💪🚀

发表 评论

Barua pepe yako haitachapishwa. 必填 项 已 用 * 标注

Kitabu ya Juu