HestiaCP PHP-FPM ağır yük altındadır? Dinamik veb səhifə 500 xətası? Bu optimallaşdırma dərhal qüvvəyə minəcək!

Bu vəziyyətlə heç qarşılaşmısınızmı?Vebsayta giriş qəfil yavaşladı və ya hətta 500 xəta ilə nəticələndi, PHP-FPM-i yenidən başlatdıqdan sonra normal vəziyyətə qayıtdı., lakin problem bir müddət sonra yenidən görünür? Bu çox sinir bozucudur!

Niyə bu baş verir?Əslində, bu, adətənPHP-FPM proses hovuzu düzgün konfiqurasiya edilməyib və ya server resursları kifayət deyil.səbəb olur. Bu gün biz hərtərəfli optimallaşdıracağıq HestiaCP Başlıq altındakı PHP-FPM veb saytı qaya kimi sabit edir!

PHP-FPM-nin həddindən artıq yüklənməsinin əsas səbəbi

PHP-FPM aProses Meneceri, dinamik sorğuların idarə edilməsinə cavabdehdir. Konfiqurasiya ağlabatan deyilsə, bu, aşağıdakılara səbəb ola bilər:

  • Server resursları tükənib, PHP-FPM-nin yeni sorğulara vaxtında cavab verə bilməməsinə səbəb olur;
  • Çox az proseslər, trafik qəfil artdıqda, onu vaxtında emal etmək mümkün deyil;
  • Prosesdən istifadə çox yüksəkdir, CPU yükünün partlamasına səbəb olur.

HestiaCP PHP-FPM ağır yük altındadır? Dinamik veb səhifə 500 xətası? Bu optimallaşdırma dərhal qüvvəyə minəcək!

PHP-FPM-in həddən artıq yükləndiyini necə müəyyən etmək olar?

istifadə edə bilərsiniz top Və ya htop CPU və yaddaş istifadəsinə baxmaq üçün əmr:

top -c

Aşağıdakılara bənzər proses məlumatını görürsünüzsə, bu o deməkdir ki, PHP-FPM yüksək yük altında işləyir:

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

Görün bu proseslər CPU-nun 70%-dən çoxunu necə tutur? Bu tez-tez baş verirsə, PHP-FPM Problem olmalıdır!

Beləliklə, serverin artıq yüklənməməsi üçün PHP-FPM konfiqurasiyasını necə optimallaşdıra bilərik?

PHP-FPM proses hovuzunun optimallaşdırılması (əsas parametrlərin tənzimlənməsi)

Birincisi, açın php-fpm Konfiqurasiya Faylları:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *PHP8.3 kimi PHP versiyanıza dəyişin və bunu belə dəyişin:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP tərəfindən təyin edilmiş PHP versiyasını sorğulayın

v-list-web-domain user domain.com

Məsələn:

v-list-web-domain abc chenweiliang.com

Çıxışda belə bir şey görəcəksiniz:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.3

Bu o deməkdir ki, vebsayt istifadə edir PHP 8.3.

PHP-FPM konfiqurasiyanıza nəzər salaq:

[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

Siz görə bilərsiniz ki, sizin pm İstifadə olunandır ondemand,Boş vaxtlarda resurs istifadəsini azalda bilsə də, trafik qəfil artdıqda, proses vaxtında cavab verə bilməyə bilər., nəticədə 500 səhv.

1. PHP-FPM proses hovuz parametrlərini tənzimləyin

Əgər konfiqurasiya istifadə edirsə dynamicBu, bəzi iş proseslərinin əvvəlcədən başlaması və sorğunun həcminə uyğun olaraq onları dinamik şəkildə tənzimləmək üsuludur, sorğunun həcmi qəfil artdıqda daha sürətli cavab verə bilər.

Müəyyən miqdarda trafikə malik veb saytlar üçün istifadə etmək tövsiyə olunur pm = dynamicÇünki o, müəyyən miqdarda boş prosesləri saxlaya bilir və yüksək paralellik zamanı 500 səhvdən qaça bilir.

Yalnız giriş həcmi son dərəcə aşağı olduqda və yaddaş resursları sıx olduqda istifadə etmək tövsiyə olunur. pm = ondemand Resurslara qənaət etmək üçün.

Təklif olunur ondemand, və optimallaşdırın pm.max_children Və digər parametrlər:

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

Niyə bunu belə dəyişmək istəyirsən?

  • pm = dynamic: Tələb nəticəsində yarana biləcək sorğu gözləməsinin qarşısını almaq üçün prosesləri daha çevik şəkildə ayırın;
  • pm.max_children = 16: Çox az proseslərin səbəb olduğu 500 səhvin qarşısını almaq;
  • pm.start_servers = 5: Prosesin yavaş başlamasından çəkinin;
  • pm.max_requests = 3000:Yaddaş sızmasının qarşısının alınması, prosesi müntəzəm olaraq təkrar emal edin.

2. Uzunmüddətli istifadənin qarşısını almaq üçün PHP skriptlərinin icra müddətini məhdudlaşdırın

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

Bu, bəzilərinin qarşısını ala bilərHəddindən artıq CPU istifadə edən PHP skriptləri serverinizi sıradan çıxara bilər.

Yadda saxladıqdan sonra PHP prosesini yenidən başladın:

sudo systemctl restart php8.3-fpm

İstənilən vaxt tərəqqi izləmək üçün PHP-FPM status monitorinqini aktivləşdirin

PHP-FPM prosesinin monitorinqini aktivləşdirin və istənilən vaxt ona baxınAktiv proseslərin cari sayı və sorğu gözləmə statusu, serverin həddən artıq yüklənməsinin qarşısını almaq üçün.

php-fpm.conf Əlavə edilib:

pm.status_path = /status

Sonra, Nginx konfiqurasiyası:

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

Bu şəkildə edə bilərsiniz http://yourdomain.com/status Fəaliyyətdə PHP-FPM-i yoxlayın!

Problemləri tez həll etmək üçün PHP-FPM qeydlərini optimallaşdırın

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

Beləliklə, hər dəfə 500 xətası baş verdikdə, jurnala birbaşa baxa bilərsiniz:

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

PHP-nin xəta haqqında məlumat verib-vermədiyinə baxın, məsələn out of memory,script execution timeout Gözləmək.

Yaddaş sızmasının qarşısını almaq üçün müntəzəm olaraq PHP-FPM-i yenidən başladın

keçə bildi cron Uzun müddət davam edən proseslərin səbəb olmasının qarşısını almaq üçün PHP-FPM-i müntəzəm olaraq yenidən başladınYaddaş Sızmaları.

crontab -e

Hər gün səhər saat 3-də PHP-FPM-i avtomatik yenidən başlatmaq üçün aşağıdakı planlaşdırılmış tapşırığı əlavə edin:

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

Bəs problem davam edərsə? Əlavə optimallaşdırma!

Əgər hələ də yuxarıdakı optimallaşdırmaya əməl edirsinizsəBəzən 500 səhv baş verir, aşağıdakı optimallaşdırmalarla davam edə bilərsiniz:

1. PHP icra effektivliyini artırmaq üçün OPcache-i aktivləşdirin

OPcache hələ işə salınmayıbsa, onu bu şəkildə quraşdıra bilərsiniz (nümunə olaraq Ubuntu istifadə edərək):

sudo apt install php8.3-opcache -y

Sonra redaktə edin php.ini:

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

Effekt? PHP səhifəsinin icra sürəti çox yaxşılaşdırıldı!

2. Nginx konfiqurasiyasının optimallaşdırılması

Nginx ilə əlaqəli parametrlərin ağlabatan olduğundan əmin olun, məsələn fastcgi_read_timeout Uzun icra müddətinə görə PHP skriptlərinin Nginx tərəfindən dayandırılmasının qarşısını almaq üçün onu müvafiq şəkildə tənzimləyin:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Xülasə: PHP-FPM-i optimallaşdırın və vebsayt artıq qəzaya uğramayacaq!

Bu optimallaşdırmadan sonra hansı düzəlişlər etdik?

✅ PHP-FPM proses hovuzunun optimallaşdırılması, istifadə edin ondemandVə optimallaşdırın pm.max_children parametr;
PHP skriptlərinin icra müddətinin məhdudlaşdırılması, uzunmüddətli CPU işğalının qarşısını almaq üçün;
PHP-FPM monitorinqini aktivləşdirin, real vaxt rejimində proses yükünü görmək;
PHP-FPM qeydlərinin optimallaşdırılması, 500 səhvin tez bir zamanda aradan qaldırılması;
PHP-FPM-i müntəzəm olaraq yenidən başladın, yaddaş sızmasının qarşısını almaq;
OPcache-i aktivləşdirin, PHP icrasının səmərəliliyini artırmaq;
Nginx konfiqurasiyasının optimallaşdırılması, vaxt aşımı problemlərindən qaçınmaq üçün.

Bu optimallaşdırmadan sonra PHP-FPM yükü xeyli azalacaq və veb saytın fəaliyyəti daha stabil olacaq! 🔥

İndi cəhd edin! 💪🚀

发表 评论

E-poçt ünvanınız dərc olunmayacaq. Zəruri sahələrdən istifadə olunur * Etiket

Top gedin