HestiaCP PHP-FPM қатты жүктемеде ме? Динамикалық веб-бет 500 қатесі? Бұл оңтайландыру бірден күшіне енеді!

Мақала анықтамалығы

Сіз мұндай жағдайға тап болдыңыз ба? Веб-сайтыңыз кенеттен баяулайды немесе тіпті 500 қатесін жібереді. PHP-FPM қайта іске қосу оны қалыпты жағдайға келтіреді , бірақ мәселе біраз уақыттан кейін қайта пайда болады ма? Бұл өте ашуландырады!

Неліктен бұлай болады? Шын мәнінде, бұл әдетте PHP-FPM процесінің пулының дұрыс конфигурацияланбауынан немесе сервер ресурстарының жеткіліксіздігінен туындайды. Бүгін біз веб-сайтыңыздың берік тұрақтылығын қамтамасыз ету үшін HestiaCP астында PHP-FPM-ді мұқият оңтайландырамыз !

PHP-FPM шамадан тыс жүктелуінің негізгі себебі

PHP-FPM - PHP үшін процесс менеджері , ол динамикалық сұраныстарды өңдеуге жауапты. Дұрыс емес конфигурация мыналарға әкелуі мүмкін:

  • Сервер ресурстары таусылды, PHP-FPM жаңа сұрауларға дер кезінде жауап бере алмауын тудыратын;
  • Тым аз процестер, трафик кенеттен артқанда, оны уақытында өңдеу мүмкін емес;
  • Процесті пайдалану тым жоғары, CPU жүктемесінің жарылуына әкеледі.

HestiaCP PHP-FPM қатты жүктемеде ме? Динамикалық веб-бет 500 қатесі? Бұл оңтайландыру бірден күшіне енеді!

PHP-FPM шамадан тыс жүктелгенін қалай анықтауға болады?

қолдана алады top Немесе htop Орталық процессор мен жадты пайдалануды көру пәрмені:

top -c

Төмендегіге ұқсас процесс ақпаратын көрсеңіз, бұл PHP-FPM жоғары жүктемеде жұмыс істеп тұрғанын білдіреді:

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

Бұл процестер CPU-ның 70%-дан астамын пайдаланатынын көріп тұрсыз ба? Егер бұл жиі қайталанса, онда сіздің PHP-FPM- іңізде бірдеңе дұрыс емес!

Сонымен, сервер бұдан былай шамадан тыс жүктелмеуі үшін PHP-FPM конфигурациясын қалай оңтайландыруға болады?

PHP-FPM процесс пулын оңтайландыру (негізгі параметрді реттеу)

Біріншіден, ашыңыз php-fpm Конфигурация файлдары:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *PHP8.5 сияқты PHP нұсқасына өзгертіңіз және оны келесіге өзгертіңіз:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP орнатқан PHP нұсқасын сұраңыз

v-list-web-domain user domain.com

Мысалы:

v-list-web-domain abc chenweiliang.com

Шығармада сіз келесідей нәрсені көресіз:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

Бұл веб-сайттың PHP 8.5 пайдаланатынын көрсетеді.

PHP-FPM конфигурацияңызды қарастырайық:

[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

Сіз мұны көре аласыз pm Қолданылғаны ondemand,Ол бос уақыт кезінде ресурстарды пайдалануды азайтуы мүмкін болса да, трафик кенет артқанда, процесс уақытында жауап бере алмауы мүмкін., нәтижесінде 500 қате.

www.conf: Жүйенің кіріктірілген «әмбебап ресурстар пулы»

PHP-FPM орнатқаннан кейін, жүйе сізге автоматты түрде... www.conf файл.
ОныңОрналасуБұл өте қарапайым — бұл әдетте жұмыс істейтін әдепкі процестер пулы, әдетте... www-деректер Пайдаланушы жүктеп алуы.

Бұл пул түрі әсіресе бір сайтты орталарға өте қолайлы: конфигурация жеңіл және параметрлердің барлығы жалпы үлгілер болып табылады, мысалы:

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

Егер сіз тек бір сайтты орналастырсаңыз, оны қосымша қиындықсыз тікелей және сенімді түрде пайдалана аласыз.

etufo.org.conf: Арнайы пул

Бірнеше сайтты іске қосқаннан кейін, барлығын бір бассейнге тығып ұстай алмайсыз.
Осы кезде HestiaCP әрбір сайт үшін автоматты түрде бөлек пул жасайды, мысалы... etufo.org.confДомен атауларына мамандандырылған etufo.org 服务。

Ойынның кең таралған тәсілі:

  • Пайдаланушылар мен топтарды өзгерту:user = etufo,group = etufo
  • Тәуелсіз бақылау:listen = /run/php/etufo.sock
  • Процестер санын реттеу тіпті жоғары параллельділік кезінде де берік тұрақтылықты қамтамасыз етеді.
  • Бөлек журнал файлдары ақаулықтарды жоюды жеңілдетеді.

Артықшылықтары айқын: сенімді оқшаулау . Бір сайт бұзылғанның өзінде, қалғандары өзгеріссіз қалады.

dummy.conf: dummy файлы

dummy.conf Әдетте бұл жүйе ұсынатын мысалдар немесе шаблондар.
Қолмен өзгертіп, қоспайынша, ол іс жүзінде іске қосылмайды.
Оның маңыздылығы жаңа пул конфигурациясын қалай жазу керектігін айтатын «пайдалану нұсқаулығына» көбірек ұқсайды.

Неліктен бассейнді бөлу керек?

  • 安全 性Әртүрлі сайттар үшін әртүрлі пайдаланушыларды пайдаланыңыз, бұл рұқсаттардың қарама-қайшылығын болдырмауға көмектеседі.
  • 性能优化Әрбір пул үшін процестер санын жеке реттеуге болады, бұл трафик сұранысына негізделген икемді реттеулерге мүмкіндік береді.
  • ОқшаулауЖурналдар, қателер және тыңдау мекенжайлары бөлек, бұл ақаулықтарды жоюды жеңілдетеді.

Мысалы, www.conf істен шықса да, etufo.org.conf қалыпты жұмыс істейді және бүкіл серверді істен шығармайды.

实际场景

  • Бір сайтты серверwww.conf жеткілікті.
  • Көп сайтты серверӘрбір сайттың өзіндік тәуелсіз .conf файлы бар, мысалы, etufo.org.conf.
  • dummy.confТек анықтама үшін, ұсынылмайды.

Конфигурацияны салыстыру

www.conf (әдепкі пул)

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

etufo.org.conf (Арнайы пул)

[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

Негізгі айырмашылықтар: пайдаланушы идентификаторы, тыңдау мекенжайы және процестер саны.

1. PHP-FPM процесс пулының параметрлерін реттеңіз

Егер конфигурация пайдаланылса dynamicБұл кейбір жұмыс процестерін алдын ала іске қосу және оларды сұрау көлеміне қарай динамикалық реттеу әдісі, ол сұрау көлемі кенет ұлғайған кезде жылдамырақ жауап бере алады.

Белгілі бір трафик мөлшері бар веб-сайттар үшін оны пайдалану ұсынылады pm = dynamicӨйткені ол бос процестердің белгілі бір мөлшерін сақтай алады және жоғары параллельдік кезінде 500 қатені болдырмайды.

Оны қол жеткізу көлемі өте төмен және жад ресурстары тар болғанда ғана пайдалану ұсынылады. pm = ondemand Ресурстарды үнемдеу үшін.

Ұсынылған dynamic, және оңтайландыру pm.max_children Және басқа параметрлер:

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

Неліктен оны осылай өзгерткіңіз келеді?

  • pm = dynamic: Сұраныс туындауы мүмкін сұрауды күтуді болдырмау үшін процестерді икемді түрде бөлу;
  • pm.max_children = 16: Тым аз процестерден туындаған 500 қатені болдырмау;
  • pm.start_servers = 5: процесті баяу іске қосудан аулақ болыңыз;
  • pm.max_requests = 3000:Жадтың ағып кетуін болдырмау, процесті жүйелі түрде қайта өңдеңіз.

2. Ұзақ уақыт бойы жұмыс істемеу үшін PHP сценарийлерінің орындалу уақытын шектеңіз

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

Бұл процессорды шамадан тыс көп тұтынатын кейбір PHP скрипттерінің сервердің істен шығуына жол бермейді.

Сақтағаннан кейін PHP процесін қайта іске қосыңыз:

sudo systemctl restart php8.3-fpm

VPS конфигурациясына негізделген PHP-FPM оңтайландыру

VPS конфигурациясының мысалы:

  • Сипаттамасы: VPS 3 NVMe
  • Дискінің кеңістігі: 300 ГБ
  • CPU ядролары: 8
  • RAM: 24 ГБ

VPS конфигурацияңызға ( 8 процессорлық ядро, 24 ГБ жедел жады ) сүйене отырып, сервер ресурстарыңыз жеткілікті. PHP-FPM үшін 24 ГБ жедел жады бір мезгілде орындалатын процестердің өте көп санын конфигурациялауға мүмкіндік береді.

Өндірістік ортада біз әдетте жүйенің өзіне, Apache дерекқорларына (мысалы, MySQL /MariaDB) және кэштерге (мысалы, Redis / Memcached ) жеткілікті жад (мысалы, 8 ГБ-12 ГБ) бөлеміз, қалған 12 ГБ-16 ГБ жад PHP-FPM-ге толығымен бөлінеді.

PHP процесіне орташа есеппен 40-60 МБ жадты пайдалану негізінде 1 ГБ жад шамамен 16-25 процесті орындай алады.

Төменде сізге арналған жоғары параллельді, жоғары өнімді FPM конфигурациясы берілген, ол WordPress сыйымдылығын айтарлықтай жақсартады және кенеттен трафиктің күрт өсуіне байланысты оның істен шығуына жол бермейді:

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

💡 Неліктен бұл конфигурация?

  1. pm.max_children = 300Бұл негізгі оңтайландыру. Сіздің бұрынғы 50 процестің конфигурациясы 24 ГБ жад үшін тым консервативті болды. Трафиктің кенеттен күрт артуына (немесе боттардың фонды толтыруына) тап болған кезде, 50 процес бірден жүктеліп, қосылымның күту уақытының аяқталуына әкеледі. Оны 300-ге дейін арттыру серверіңіздің параллельді өңдеу қабілетін бірнеше есе жақсарта алады.
  2. pm.start_servers / `мин_қосалқы_серверлерСізде 8 процессор ядросы болғандықтан, бастапқыда және әдетте көбірек бос процестерді сақтай аласыз, бұл сізге көп ядролы артықшылықты пайдалануға мүмкіндік береді, осылайша жаңа сұраныстар процесті жасауды күтпей-ақ бірден ашылуы мүмкін.
  3. pm.max_requests = 1000500-ден 1000-ға дейін арттырыңыз. Жадыңыз үлкен және процестерді жиі қайта бастаудың қажеті жоқ. 1000-ға дейін арттыру процестердің жиі бұзылуы мен жасалуынан туындайтын процессор шығынын азайтуы мүмкін.

Баяу жұмыс журналын қараңыз:

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

Өзгерістер енгізгеннен кейін, өзгерістер күшіне енуі үшін PHP-FPM қызметін қайта іске қосуды ұмытпаңыз.

systemctl restart php8.5-fpm

Прогрессті кез келген уақытта бақылау үшін PHP-FPM күй мониторингін қосыңыз

PHP-FPM процесін бақылауды қосу кез келген уақытта белсенді процестер санын көруге және күту күйін сұрауға мүмкіндік береді , бұл сервердің шамадан тыс жүктелуіне жол бермейді.

php-fpm.conf Қосылған:

pm.status_path = /status

Содан кейін 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;
}

Осылайша сіз аласыз http://yourdomain.com/status PHP-FPM әрекетін тексеріңіз!

Ақаулықтарды жылдам жою үшін PHP-FPM журналдарын оңтайландырыңыз

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

Осылайша, 500 қате орын алған сайын журналды тікелей көруге болады:

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

PHP қате туралы хабарлағанын қараңыз, мысалы out of memory,script execution timeout Күте тұрыңыз.

Жадтың ағып кетуін болдырмау үшін PHP-FPM жүйелі түрде қайта іске қосыңыз

өтуге қабілетті cron Ұзақ орындалатын процестердің туындауын болдырмау үшін PHP-FPM жүйелі түрде қайта іске қосыңызЖадтың ағып кетуі.

crontab -e

Күн сайын таңғы сағат 3-те PHP-FPM автоматты түрде қайта іске қосу үшін келесі жоспарланған тапсырманы қосыңыз:

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

Мәселе жойылмаса ше? Әрі қарай оңтайландыру!

Жоғарыдағы оңтайландыруларды орындағаннан кейін де кейде 500 қатесі пайда болса , келесі оңтайландыруларды жалғастыра аласыз:

1. РНР орындау тиімділігін арттыру үшін OPcache қосыңыз

OPcache әлі қосылмаған болса, оны келесідей орнатуға болады (мысалы, Ubuntu арқылы):

sudo apt install php8.5-opcache -y

Содан кейін өңдеу php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Нақты уақыттағы анықтауды өшіруФайлдық жүйенің енгізу/шығаруын азайтыңыз және өнімділікті жақсартыңыз.
  • Дегенмен, бұл PHP файлдарын өзгерткеннен кейін кэшті қолмен тазалау (PHP қызметін қайта іске қосу) керек дегенді білдіреді.

Конфигурацияны өзгерткеннен кейін, өзгерістер күшіне енуі үшін PHP қызметін қайта іске қосу керек.

sudo systemctl restart php<版本>-fpm

Әсер? PHP бетін орындау жылдамдығы айтарлықтай жақсарды!

2. Nginx конфигурациясын оңтайландыру

сияқты Nginx қатысты параметрлердің орынды екеніне көз жеткізіңіз fastcgi_read_timeout PHP сценарийлерінің ұзақ орындалу уақытына байланысты Nginx арқылы тоқтатылуына жол бермеу үшін оны дұрыс реттеңіз:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Түйіндеме: PHP-FPM оңтайландырыңыз және веб-сайт енді бұзылмайды!

Осы оңтайландырудан кейін біз қандай түзетулер жасадық?

✅ PHP-FPM процесс пулын оңтайландыру, қолданыңыз ondemandЖәне оңтайландыру pm.max_children параметр;
РНР сценарийлерінің орындалу уақытын шектеу, процессордың ұзақ уақыт жұмыс істеуін болдырмау үшін;
PHP-FPM мониторингін қосыңыз, нақты уақыт режимінде технологиялық жүктемені қарау;
PHP-FPM журналдарын оңтайландыру, 500 қатені жылдам жою;
PHP-FPM жүйелі түрде қайта іске қосыңыз, жадтың ағып кетуіне жол бермеу;
OPcache қосу, РНР орындау тиімділігін арттыру;
Nginx конфигурациясын оңтайландыру, күту уақыты мәселелерін болдырмау үшін.

Бұл оңтайландырудан кейін PHP-FPM жүктемесі айтарлықтай азаяды және веб-сайт жұмысы тұрақтырақ болады! 🔥

Қазір барып көріңіз! 💪🚀

Егер сіз әлі де HestiaCP көмегімен PHP-FPM үлгілерін теңшеу туралы көбірек білгіңіз келсе, онда бұл мақала сізге тереңірек түсінік береді:

👉 HestiaCP арнайы PHP-FPM үлгісі: PHP 8.5 өнімділікті оңтайландыру құпиялары ▼

Бұл мазмұнда сіз мыналарды көресіз:

  • Жоғары параллельді оңтайландыру әдістері: процесті дұрыс конфигурациялау арқылы жауап беру жылдамдығын қалай жақсартуға болады.
  • Қауіпсіздікті оқшаулау шешімі: сайттар арасындағы кіру қауіптерінен аулақ болыңыз және тіркелгінің тұрақтылығын қамтамасыз етіңіз.
  • Журналдар және мониторинг: Кедергілерді табу және веб-сайттың жұмысын үздіксіз оңтайландыру үшін баяу журналдарды пайдаланыңыз.

Чен Вэйлиангтың блогында ( https://www.chenweiliang.com/ ) бөлісілген «HestiaCP PHP-FPM шамадан тыс жүктелуі ме? Динамикалық веб-бет 500 қатесі ме? Бұл оңтайландыру әдісі бірден нәтиже көрсетеді!» мақаласы сізге пайдалы болады деп үміттенемін .

Осы мақаланың сілтемесін бөлісуден тартынбаңыз: https://www.chenweiliang.com/cwl-32512.html

Көбірек жасырын трюктердің құлпын ашу үшін🔑 Telegram каналымызға қосылыңыз!

Бөлісу және ұнаса лайк! Сіздің бөлісулеріңіз бен лайктарыңыз біздің тұрақты мотивациямыз болып табылады!

 

Пікірлер

您的邮箱地址不会被公开。必填项已用*标注

Топ Scroll