HestiaCP PHP-FPM katta yuk ostidami? Dinamik veb-sahifa 500 xatosi? Ushbu optimallashtirish darhol kuchga kiradi!

Siz hech qachon bunday vaziyatga duch kelganmisiz? Veb-saytingiz to'satdan sekinlashadi yoki hatto 500 xatosini chiqaradi. PHP-FPM ni qayta ishga tushirish uni normal holatga qaytaradi , ammo muammo bir muncha vaqt o'tgach yana paydo bo'ladimi? Bu juda asabga tegadi!

Nima uchun bunday bo'ladi? Aslida, bu odatda noto'g'ri PHP-FPM jarayonlar pulining konfiguratsiyasi yoki server resurslarining yetarli emasligi tufayli yuzaga keladi. Bugun biz veb-saytingizning mustahkam barqarorligini ta'minlash uchun HestiaCP ostida PHP-FPM ni to'liq optimallashtiramiz !

PHP-FPM haddan tashqari yuklanishining asosiy sababi

PHP-FPM - bu PHP uchun jarayon menejeri bo'lib , dinamik so'rovlarni qayta ishlash uchun javobgardir. Noto'g'ri konfiguratsiya quyidagilarga olib kelishi mumkin:

  • Server resurslari tugadi, PHP-FPM yangi so'rovlarga o'z vaqtida javob bera olmasligiga olib keladi;
  • Juda oz jarayonlar, trafik to'satdan ko'payganda, uni o'z vaqtida qayta ishlash mumkin emas;
  • Jarayondan foydalanish juda yuqori, CPU yukining portlashiga olib keladi.

HestiaCP PHP-FPM katta yuk ostidami? Dinamik veb-sahifa 500 xatosi? Ushbu optimallashtirish darhol kuchga kiradi!

PHP-FPM haddan tashqari yuklanganligini qanday aniqlash mumkin?

foydalanishi mumkin top Yoki htop CPU va xotiradan foydalanishni ko'rish buyrug'i:

top -c

Agar siz quyidagiga o'xshash jarayon ma'lumotlarini ko'rsangiz, bu PHP-FPM yuqori yuk ostida ishlayotganligini anglatadi:

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

Ushbu jarayonlar protsessorning 70% dan ortig'ini ishlatayotganini ko'ryapsizmi? Agar bu tez-tez sodir bo'lsa, demak , PHP-FPM da biron bir muammo bor!

Xo'sh, server ortiqcha yuklanmasligi uchun PHP-FPM konfiguratsiyasini qanday optimallashtirishimiz mumkin?

PHP-FPM jarayonlar hovuzini optimallashtirish (asosiy parametrlarni sozlash)

Birinchidan, oching php-fpm Konfiguratsiya fayllari:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *PHP8.5 kabi PHP versiyangizga o'zgartiring va uni quyidagicha o'zgartiring:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP tomonidan o'rnatilgan PHP versiyasini so'rang

v-list-web-domain user domain.com

Masalan:

v-list-web-domain abc chenweiliang.com

Chiqishda siz shunga o'xshash narsani ko'rasiz:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

Bu veb-sayt PHP 8.5 dan foydalanayotganligini ko'rsatadi.

Keling, PHP-FPM konfiguratsiyasini ko'rib chiqaylik:

[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 buni ko'rishingiz mumkin pm Ishlatilgani ondemand,Bo'sh vaqt davomida resursdan foydalanishni kamaytirishi mumkin bo'lsa-da, trafik to'satdan ko'payganda, jarayon o'z vaqtida javob bera olmasligi mumkin., natijada 500 xato.

www.conf: Tizimning o'rnatilgan "universal resurslar havzasi"

PHP-FPM ni o'rnatgandan so'ng, tizim sizga avtomatik ravishda... ni taqdim etadi. www.conf hujjat.
uningJoylashuvBu juda oddiy — bu shunchaki standart jarayonlar puli bo'lib, u odatda... ga biriktirilgan. www-ma'lumotlar Foydalanuvchi yuklab olish.

Ushbu turdagi basseyn, ayniqsa, bitta saytli muhitlar uchun juda mos keladi: konfiguratsiya yengil va parametrlarning barchasi umumiy shablonlardir, masalan:

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

Agar siz faqat bitta saytga egalik qilsangiz, undan qo'shimcha muammosiz to'g'ridan-to'g'ri va ishonchli foydalanishingiz mumkin.

etUFO.org.conf: Maxsus pul

Bir nechta saytlarni ishga tushirganingizdan so'ng, barchani bitta hovuzga sig'dira olmaysiz.
Bu vaqtda, HestiaCP avtomatik ravishda har bir sayt uchun alohida hovuz yaratadi, masalan... etUFO.org.confDomen nomlari uchun ixtisoslashgan etufo.org xizmat.

O'ynashning keng tarqalgan usuli:

  • Foydalanuvchilar va guruhlarni o'zgartirish:user = etufo,group = etufo
  • Mustaqil monitoring:listen = /run/php/etufo.sock
  • Jarayonlar sonini sozlash, hatto yuqori parallellik sharoitida ham mustahkam barqarorlikni ta'minlaydi.
  • Alohida jurnal fayllari muammolarni bartaraf etishni aniqroq qiladi.

Foydasi aniq: xavfsiz izolyatsiya . Agar bitta sayt buzilgan bo'lsa ham, qolganlari ta'sirlanmaydi.

dummy.conf: dummy fayli

dummy.conf Bu odatda tizim tomonidan taqdim etilgan misollar yoki shablonlardir.
Uni qo'lda o'zgartirib, yoqmaguningizcha, u aslida ishlamaydi.
Uning ahamiyati ko'proq "foydalanish qo'llanmasiga" o'xshaydi, unda sizga yangi hovuz konfiguratsiyasini qanday yozish kerakligi aytilgan.

Nima uchun basseynni ikkiga bo'lish kerak?

  • Ānquán xìngRuxsatnomalar ziddiyatini oldini olish uchun turli saytlar uchun turli foydalanuvchilardan foydalaning.
  • língínínJarayonlar soni har bir hovuz uchun alohida sozlanishi mumkin, bu esa trafik talabiga asoslangan moslashuvchan sozlash imkonini beradi.
  • IzolyatsiyaJurnallar, xatolar va tinglash manzillari barchasi ajratilgan, bu esa muammolarni bartaraf etishni osonlashtiradi.

Masalan, www.conf ishdan chiqsa ham, etufo.org.conf normal ishlaydi va butun serverni o'chirib qo'ymaydi.

língìnì

  • Yagona saytli server: www.conf yetarli.
  • Ko'p saytli serverHar bir sayt o'zining mustaqil .conf fayliga ega, masalan, etufo.org.conf.
  • dummy.confFaqat ma'lumot uchun, tavsiya etilmaydi.

Konfiguratsiyani taqqoslash

www.conf (standart pul)

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

etufo.org.conf (Maxsus 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

Asosiy farqlar quyidagilardir: foydalanuvchi identifikatori, tinglash manzili va jarayonlar soni.

1. PHP-FPM jarayon hovuz parametrlarini sozlang

Agar konfiguratsiya ishlatilsa dynamicBu ba'zi ish jarayonlarini oldindan boshlash va ularni so'rov hajmiga qarab dinamik ravishda sozlash usuli bo'lib, so'rov hajmi to'satdan oshganida tezroq javob berishi mumkin.

Muayyan trafik miqdori bo'lgan veb-saytlar uchun foydalanish tavsiya etiladi pm = dynamicChunki u ma'lum miqdordagi bo'sh jarayonlarni saqlab turishi va yuqori parallellik vaqtida 500 ta xatolikdan qochishi mumkin.

Uni faqat kirish hajmi juda past va xotira resurslari tor bo'lganda ishlatish tavsiya etiladi. pm = ondemand Resurslarni tejash uchun.

Tavsiya etilgan dynamic, va optimallashtirish pm.max_children Va boshqa parametrlar:

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

Nega buni shunday o'zgartirmoqchisiz?

  • pm = dynamic: Talab tufayli yuzaga kelishi mumkin bo'lgan so'rovni kutishning oldini olish uchun jarayonlarni moslashuvchanroq taqsimlang;
  • pm.max_children = 16: Juda oz jarayonlardan kelib chiqqan 500 ta xatoning oldini olish;
  • pm.start_servers = 5: Jarayonni sekin ishga tushirishdan saqlaning;
  • pm.max_requests = 3000:Xotira oqishining oldini olish, jarayonni muntazam ravishda qayta ishlang.

2. PHP skriptlarining uzoq muddat band bo'lishining oldini olish uchun bajarilish vaqtini cheklang

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

Bu esa, ortiqcha protsessor sarflaydigan ba'zi PHP skriptlarining serverni ishdan chiqarishining oldini oladi.

Saqlagandan so'ng, PHP jarayonini qayta ishga tushiring:

sudo systemctl restart php8.3-fpm

VPS konfiguratsiyasi asosida PHP-FPM ni optimallashtiring

VPS konfiguratsiyasiga misol:

  • Tavsif: VPS 3 NVMe
  • Disk maydoni: 300 GB
  • CPU yadrolari: 8
  • RAM: 24 GB

VPS konfiguratsiyangizga asoslanib ( 8 protsessor yadrosi, 24 GB operativ xotira ), server resurslaringiz yetarli darajadan ko'proq. PHP-FPM uchun 24 GB operativ xotira sizga juda ko'p sonli bir vaqtda bajariladigan jarayonlarni sozlash imkonini beradi.

Ishlab chiqarish muhitida biz odatda tizimning o'zi, Apache ma'lumotlar bazalari (masalan, MySQL /MariaDB) va keshlar (masalan, Redis / Memcached ) uchun yetarli xotira (masalan, 8GB-12GB) ajratamiz, qolgan 12GB-16GB xotira PHP-FPM ga to'liq ajratiladi.

PHP jarayoni uchun o'rtacha 40MB-60MB xotira sarfiga asoslanib , 1 Gb xotira taxminan 16-25 ta jarayonni bajarishi mumkin.

Quyida siz uchun moslashtirilgan yuqori parallellikdagi, yuqori unumdorlikdagi FPM konfiguratsiyasi keltirilgan bo'lib, u WordPress imkoniyatlarini sezilarli darajada yaxshilaydi va to'satdan trafikning ko'tarilishi tufayli ishdan chiqishining oldini oladi:

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

💡 Nima uchun aynan shu konfiguratsiya?

  1. pm.max_children = 300Bu asosiy optimallashtirishdir. Sizning oldingi 50 ta jarayon konfiguratsiyangiz 24 Gb xotira uchun juda konservativ edi. Trafikning to'satdan ko'payishiga (yoki botlarning fonni to'ldirishiga) duch kelganingizda, 50 ta jarayon darhol yuklanib ketadi va bu ulanish vaqt tugashiga olib keladi. Uni 300 tagacha oshirish serveringizning parallel ishlov berish qobiliyatini bir necha baravar oshirishi mumkin.
  2. pm.start_servers / `min_zaxira_serverlarSizda 8 ta protsessor yadrosi mavjudligi sababli, dastlab va odatda ko'proq bo'sh jarayonlarni saqlab qolishingiz mumkin, bu sizga ko'p yadroli afzalliklardan foydalanish imkonini beradi, shunda yangi so'rovlar jarayonlar yaratilishini kutmasdan darhol ochilishi mumkin.
  3. pm.max_requests = 1000500 dan 1000 gacha oshiring. Xotirangiz katta va jarayonlarni tez-tez qayta ishga tushirish shart emas. 1000 gacha oshirish jarayonlarning tez-tez yo'q qilinishi va yaratilishi natijasida protsessor sarfini kamaytirishi mumkin.

Sekin jurnalni ko'rish:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

O'zgarishlarni amalga oshirgandan so'ng, o'zgarishlar kuchga kirishi uchun PHP-FPM xizmatini qayta ishga tushirishni unutmang.

systemctl restart php8.5-fpm

Istalgan vaqtda taraqqiyotni kuzatib borish uchun PHP-FPM holati monitoringini yoqing

PHP-FPM jarayonlarini monitoring qilishni yoqish sizga istalgan vaqtda faol jarayonlar sonini ko'rish va kutish holatini so'rash imkonini beradi , bu esa serverning haddan tashqari yuklanishining oldini oladi.

php-fpm.conf Qo'shilgan:

pm.status_path = /status

Keyin Nginx konfiguratsiyasi:

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

Shu tarzda, mumkin http://yourdomain.com/status PHP-FPMni amalda tekshiring!

Muammolarni tezda bartaraf etish uchun PHP-FPM jurnallarini optimallashtiring

php-fpm.conf Qo'shish:

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

Shunday qilib, 500 xatolik yuzaga kelganda, siz to'g'ridan-to'g'ri jurnalni ko'rishingiz mumkin:

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

PHP xato haqida xabar beradimi yoki yo'qligini tekshiring, masalan out of memory,script execution timeout Kutmoq.

Xotira oqishini oldini olish uchun PHP-FPM-ni muntazam ravishda qayta ishga tushiring

o'tishga qodir cron Uzoq davom etadigan jarayonlar sabab bo'lishining oldini olish uchun PHP-FPM-ni muntazam ravishda qayta ishga tushiringXotiraning oqishi.

crontab -e

Har kuni soat 3 da PHP-FPM ni avtomatik ravishda qayta ishga tushirish uchun quyidagi rejalashtirilgan vazifani qo'shing:

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

Muammo davom etsa-chi? Qo'shimcha optimallashtirish!

Agar yuqoridagi optimallashtirishlarni bajarganingizdan keyin ham vaqti-vaqti bilan 500 xatosiga duch kelsangiz , quyidagi optimallashtirishlarni davom ettirishingiz mumkin:

1. PHP ijro samaradorligini oshirish uchun OPcache-ni yoqing

Agar OPcache hali yoqilmagan bo'lsa, uni shunday o'rnatishingiz mumkin (misol sifatida Ubuntu'dan foydalanib):

sudo apt install php8.5-opcache -y

keyin tahrir qiling php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Real vaqt rejimida aniqlashni o'chirib qo'yishFayl tizimining kirish/chiqishini kamaytiring va ish faoliyatini yaxshilang.
  • Biroq, bu PHP fayllarini o'zgartirgandan so'ng keshni qo'lda tozalashingiz (PHP xizmatini qayta ishga tushirishingiz) kerakligini anglatadi.

Konfiguratsiyani o'zgartirgandan so'ng, o'zgarishlar kuchga kirishi uchun PHP xizmatini qayta ishga tushirishingiz kerak.

sudo systemctl restart php<版本>-fpm

Effekt? PHP sahifasini bajarish tezligi ancha yaxshilandi!

2. Nginx konfiguratsiyasini optimallashtirish

Nginx bilan bog'liq parametrlar o'rtacha ekanligiga ishonch hosil qiling, masalan fastcgi_read_timeout PHP skriptlari Nginx tomonidan uzoq bajarilish vaqti tufayli tugatilishiga yo'l qo'ymaslik uchun uni mos ravishda sozlang:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Xulosa: PHP-FPM-ni optimallashtiring va veb-sayt endi buzilmaydi!

Ushbu optimallashtirishdan keyin qanday tuzatishlar kiritdik?

✅ PHP-FPM jarayonlar pulini optimallashtirish, foydalaning ondemandVa optimallashtirish pm.max_children parametr;
PHP skriptlarining bajarilish vaqtini cheklash, uzoq muddatli CPU ishg'ol oldini olish uchun;
PHP-FPM monitoringini yoqing, real vaqtda jarayon yukini ko'rish;
PHP-FPM jurnallarini optimallashtirish, 500 ta xatoni tezda bartaraf etish;
PHP-FPMni muntazam ravishda qayta ishga tushiring, xotira oqishini oldini olish;
OPcache-ni yoqing, PHP ijro samaradorligini oshirish;
Nginx konfiguratsiyasini optimallashtirish, vaqt tugashi bilan bog'liq muammolarni oldini olish uchun.

Ushbu optimallashtirishdan so'ng, PHP-FPM yuki sezilarli darajada kamayadi va veb-sayt ishi yanada barqaror bo'ladi! 🔥

Hozir boring, sinab ko'ring! 💪🚀

Agar siz hali ham HestiaCP yordamida PHP-FPM shablonlarini sozlash haqida ko'proq bilishni istasangiz, unda ushbu maqola sizga chuqurroq tushuncha beradi:

👉 HestiaCP maxsus PHP-FPM shabloni: PHP 8.5 samaradorlikni optimallashtirish sirlari ▼

Ushbu kontentda siz quyidagilarni ko'rasiz:

  • Yuqori parallellikni optimallashtirish texnikasi: oqilona jarayon konfiguratsiyasi orqali javob tezligini qanday oshirish mumkin.
  • Xavfsizlikni izolyatsiya qilish yechimi: Saytlararo kirish xavflaridan qoching va hisob barqarorligini ta'minlang.
  • Jurnallar va monitoring: To'siqlarni aniqlash va veb-sayt ish faoliyatini doimiy ravishda optimallashtirish uchun sekin jurnallardan foydalaning.

发表 评论

língíngíngíngíngíngíngíngíngíngíngíngíngín *

Top o'ting