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.5 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.5 

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

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

[chenweiliang.com]
listen = /run/php/php8.5-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.

www.conf: Sistemin daxili "universal resurs hovuzu"

PHP-FPM quraşdırıldıqdan sonra sistem avtomatik olaraq sizə... www.conf sənəd.
它的YerləşdirməÇox sadədir — bu, sadəcə qutudan kənarda işləyən, adətən əlavə olunmuş standart bir proses hovuzudur... www-məlumatları İstifadəçi yükləməsi.

Bu tip hovuz xüsusilə tək saytlı mühitlər üçün uyğundur: konfiqurasiya yüngüldür və parametrlər hamısı ümumi şablonlardır, məsələn:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Yalnız bir sayt yerləşdirirsinizsə, əlavə çətinlik çəkmədən birbaşa və etibarlı şəkildə istifadə edə bilərsiniz.

etUfo.org.conf: Xüsusi hovuz

Birdən çox sayt işlətdikdən sonra, hər kəsi eyni hovuza sıxışdıra bilməzsiniz.
Bu nöqtədə, HestiaCP avtomatik olaraq hər sayt üçün ayrı bir hovuz yaradacaq, məsələn... etUfo.org.confDomen adları üçün ixtisaslaşmış etufo.org 服务。

Oynamağın ümumi yolu:

  • İstifadəçiləri və qrupları dəyişdirin:user = etufo,group = etufo
  • Müstəqil monitorinq:listen = /run/php/etufo.sock
  • Proseslərin sayının tənzimlənməsi, yüksək paralellik şəraitində belə, möhkəm sabitliyi təmin edir.
  • Ayrı jurnal faylları problemlərin həllini daha aydın edir.

Faydaları göz qabağındadır:Təhlükəsiz izolyasiyaBir sayt təhlükə altında olsa belə, digər saytlar təsirlənməyəcəkdir.

dummy.conf: dummy faylı

dummy.conf Bunlar adətən sistem tərəfindən təqdim edilən nümunələr və ya şablonlardır.
Əl ilə dəyişdirib aktivləşdirməsəniz, əslində işləməyəcək.
Onun əhəmiyyəti daha çox yeni bir hovuz konfiqurasiyasının necə yazılacağını sizə izah edən "əməliyyat təlimatı"na bənzəyir.

Niyə hovuzu bölmək lazımdır?

  • 安全 性Ziddiyyətli icazələrin qarşısını almaq üçün fərqli saytlar üçün fərqli istifadəçilərdən istifadə edin.
  • 性能优化Proseslərin sayı hər bir hovuz üçün fərdi olaraq tənzimlənə bilər ki, bu da trafik tələbinə əsasən çevik tənzimləmələrə imkan verir.
  • İzoləQeydlər, səhvlər və dinləmə ünvanları hamısı bir-birindən ayrılıb və bu da problemlərin aradan qaldırılmasını asanlaşdırır.

Məsələn: hətta əgər www.conf Çökdü.etufo.org.conf Hələ də normal işləyəcək və bütün serveri sıradan çıxarmayacaq.

实际场景

  • Tək saytlı serverwww.conf kifayətdir.
  • Çoxsaytlı serverHər saytın etufo.org.conf kimi müstəqil .conf faylı var.
  • dummy.confYalnız istinad üçündür, tövsiyə edilmir.

Konfiqurasiya Müqayisəsi

www.conf (standart hovuz)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Xüsusi Hovuz)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

Əsas fərq budur:İstifadəçi şəxsiyyəti, dinləmə ünvanı, proseslərin sayı.

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 dynamic, 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

VPS konfiqurasiyasına əsasən PHP-FPM-i optimallaşdırın

VPS konfiqurasiya nümunəsi:

  • Təsvir: VPS 3 NVMe
  • Disk sahəsi: 300 GB
  • CPU nüvələri: 8
  • RAM: 24 GB

VPS konfiqurasiyanızdan asılı olaraq (8 nüvəli prosessor, 24 GB RAMServer resurslarınız kifayət qədərdir. PHP-FPM üçün 24 GB yaddaş çox sayda paralel prosesləri konfiqurasiya etməyə imkan verir.

İstehsal mühitində, adətən, sistemin özünü, Apache verilənlər bazasını (məsələn...) təmin edirik. MySQL/MariaDB) və keş (məsələn, Redis/XatirəKifayət qədər yaddaş (məsələn, 8GB-12GB) saxlayın, qalanı... 12GB-16GB RAMTamamilə PHP-FPM-ə təyin edilə bilər.

PHP prosesinə görə orta istifadəyə əsaslanır 40MB – 60MB Yaddaş istifadəsi baxımından, 1GB yaddaş təxminən 16-25 prosesi işlədə bilər.

Aşağıdakılar sizin üçün xüsusi olaraq hazırlanmışdır.Yüksək paralellik, yüksək performanslı FPM konfiqurasiyasıÇox yaxşılaşdıra bilər WordPress O, ağır trafik axınını idarə etmək qabiliyyətinə malikdir və ani trafik artımlarının sistem qəzalarına səbəb olmasının qarşısını ala bilər.

pm = dynamic

; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300

; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32

; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16

; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64

; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000

; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s

; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s

💡 Niyə bu konfiqurasiya?

  1. pm.max_children = 300Bu, əsas optimallaşdırmadır. Əvvəlki 50 proses konfiqurasiyanız 24GB yaddaş üçün çox mühafizəkar idi. Trafikdə qəfil artımlarla qarşılaşdıqda (və ya botlar arxa planı doldurduqda), 50 proses dərhal yüklənəcək və bu da bağlantı fasilələrinə səbəb olacaq. Onu 300-ə çatdırmaq serverinizin paralel işləmə qabiliyyətini bir neçə dəfə artıra bilər.
  2. pm.start_servers / `min_ehtiyat_serverləri8 CPU nüvəniz olduğundan, əvvəlcə və normal olaraq daha çox boş proses saxlaya bilərsiniz ki, bu da çoxnüvəli üstünlükdən yararlanmağa imkan verir ki, yeni sorğular prosesin yaradılmasını gözləmədən dərhal açılsın.
  3. pm.max_requests = 1000500-dən 1000-ə qədər artırın. Yaddaşınız böyükdür və proseslərin tez-tez yenidən başlamasına ehtiyac yoxdur. 1000-ə qədər artırmaq, tez-tez proseslərin məhv edilməsi və yaradılması nəticəsində yaranan CPU istehlakını azalda bilər.

Dəyişiklikləri etdikdən sonra, dəyişikliklərin qüvvəyə minməsi üçün PHP-FPM xidmətini yenidən başlatmağı unutmayın.

systemctl restart php8.5-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.5-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.5-opcache -y

Sonra redaktə edin php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Real vaxt aşkarlamasını deaktiv edinFayl sisteminin giriş/çıxışını azaldın və performansı artırın.
  • Lakin bu o deməkdir ki, PHP fayllarını dəyişdirdikdən sonra önbelleği əl ilə təmizləməlisiniz (PHP xidmətini yenidən başlatmalısınız).

Konfiqurasiyanı dəyişdirdikdən sonra dəyişikliklərin qüvvəyə minməsi üçün PHP xidmətini yenidən başlatmalısınız.

sudo systemctl restart php<版本>-fpm

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! 💪🚀

Əgər hələ də HestiaCP ilə PHP-FPM şablonlarını fərdiləşdirmək haqqında daha çox məlumat əldə etmək istəyirsinizsə, bu məqalə sizə daha dərindən məlumat verəcəkdir:

👉 HestiaCP Xüsusi PHP-FPM Şablonu: PHP 8.5 Performans Optimallaşdırma Sirləri ▼

Bu məzmunda aşağıdakıları görəcəksiniz:

  • Yüksək paralellik optimallaşdırma üsulları: Ağlabatan proses konfiqurasiyası vasitəsilə cavab sürətini necə artırmaq olar.
  • Təhlükəsizlik izolyasiyası həlli: Saytlararası giriş risklərindən qaçın və hesabın sabitliyini təmin edin.
  • Qeydlər və monitorinq: Tıxanma nöqtələrini tapmaq və veb saytın işini davamlı olaraq optimallaşdırmaq üçün yavaş qeydlərdən istifadə edin.

发表 评论

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

Top gedin