8 ядролуу 24 ГБ VPS эс тутуму түгөнүп баратабы? HestiaCP менен PHP-FPM процесстер пулун экстремалдык түрдө жөндөө боюнча практикалык колдонмо

Сервер бир эле учурда канча колдонуучуну иштете алаары анын канча ядросунан эмес, ар бир процесс канча эс тутумду керектей тургандыгынан көз каранды.

Бул билдирүү провокация сыяктуу угулушу мүмкүн, бирок бул эксплуатация жана техникалык тейлөө тармагындагы эң реалдуу жана оор тажрыйба.

Эмне үчүн эс тутум негизги тоскоолдук болуп саналат?

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

Бирок, чындыгында, бир PHP процессинин RSS эс тутумун колдонуусу көбүнчө 200 МБга чейин жетет.

Бул буйрук сабы аркылуу чыныгы тестирлөө аркылуу алынган натыйжа:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

HestiaCPтин татаал алкагында жана көп плагиндүү чөйрөсүндө , айрыкча OPcache оптималдаштыруусуз, 200 МБ норма болуп саналат.

Бул максималдуу параллелдүүлүктү аныктоочу катуу чектөө CPU эмес, эс тутум экенин билдирет.

8 ядролуу 24 ГБ VPS эс тутуму түгөнүп баратабы? HestiaCP менен PHP-FPM процесстер пулун экстремалдык түрдө жөндөө боюнча практикалык колдонмо

Сунушталган конфигурация файлы (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Параметрлерди эсептөө логикасы жана орнотуунун негизи

Конфигурация параметрлериМаани коюуНегизги эсептөө жана орнотуу негизи
pmdynamicДинамикалык режим параллелизм талаптарына негизделген процесстерди ийкемдүү кошууга же алып салууга мүмкүндүк берет, жооп берүү ылдамдыгын жана эс тутумду пайдаланууну тең салмактайт.
pm.max_children80Системалык ядрону алып салгандан кийин жалпы эс тутуму 24 ГБ жана MySQL/RedisNginxтен кийин PHP үчүн болжол менен 16 ГБ калат.16,384 MB / 200 MB ≈ 81.9Аны 80ге коюу жогорку параллелдүүлүк учурунда OOM (Эстутумсуздук) функциясын толугу менен жок кыла алат.
pm.start_servers16Кызмат кайра иштетилгенден кийин негизги параллелдүүлүктү заматта иштете алышы үчүн, ишке киргизүүдө алдын ала ысытуу CPU ядролорунун санынан эки эсе көп (8 ядро ​​× 2 = 16) деп коюлган.
pm.min_spare_servers8Трафик аз болгон мезгилде жаңы суроо-талаптарга каалаган убакта жооп берүүгө мүмкүнчүлүк берүү үчүн CPU өзөктөрүнүн санын 8ге коюңуз.
pm.max_spare_servers24Трафик азайгандан кийин процесстердин орточо санын сактап калуу үчүн, акырындык менен өзгөрүүлөрдү башкаруу үчүн, аны CPU ядролорунун санынан 3 эсе көп кылып коюңуз (8 ядро ​​​​× 3 = 24).
pm.max_requests500Эгерде бир гана процесс 200 МБ чоң базага жетсе, жок кылуудан жана кайра куруудан мурун суроо-талаптардын санын 500гө чейин азайтуу эс тутумдун агып кетишин тезирээк тазалай алат.
pm.process_idle_timeout10sары min_spare_servers Бош процесстер автоматтык түрдө бошотулуп, 10 секунддук суроо-талаптар жок болгондон кийин системанын эс тутумуна кайтарылат.

Негизги колдоочу жөндөөлөр жана оптималдаштыруу боюнча сунуштар

1. Похмельге каршы тайм-аут механизми

request_terminate_timeout = 60s Мына ачкыч.

Ал маалымат базасынын туюкка кептелишинен же үчүнчү тараптын API бөгөттөөсүнөн улам тыгылып калган процесстерди күч менен токтото алат.

Ошол эле учурда, Nginx's fastcgi_read_timeout Аны кеминде 60 секунд кармоо керек, болбосо кардар аны мөөнөтүнөн мурда алат. 504 Gateway Timeout.

2. Эс тутумдагы кыйынчылыктарды жеңүү стратегиялары

Эң көп дегенде 80 бир эле учурда жүргүзүлүүчү процесстер, өзгөчө бир эле учурда иштөө шарттарында система бир эле учурда эң көп дегенде 80 динамикалык HTTP суроо-талаптарын иштете алаарын билдирет.

Эгер сиз кубаттуулукту андан ары жакшыртууну кааласаңыз, көңүл ар бир процессте эстутумдун колдонулушун азайтууга бурулушу керек.

  • OPcache иштетүү: in php.ini Орточо конфигурация opcache.enable=1 жана opcache.memory_consumption=256Байткод кэштөө бир процесстин эстутумду колдонуусун 200 МБдан 60 ~ 100 МБга чейин азайта алат.
  • Memory_limitти акылга сыярлык башкаруу:将 php.ini ортоңку memory_limit Чектелген 128M256MЖеке анормалдуу сценарийлердин алдын алуу үчүнЖАл көп эстутумду ээлейт.

Бир процесстин эстутумду колдонуусу 100 МБга чейин төмөндөгөндөн кийин...pm.max_children Аны коопсуз түрдө жаңыртууга болот 150 Мындан тышкары, параллелдүүлүк мүмкүнчүлүгү дээрлик эки эсеге көбөйдү.

Расмий көз караштар келтирилген

Расмий Nginx документтериндеги сунуштарга ылайык :

"Ресурстардын түгөнүшүнө жол бербөө үчүн FastCGI тиркемелерин ар дайым тайм-аут директивалары менен көзөмөлдөө керек."
(Булак: Nginx Docs)

Расмий PHP колдонмосунда так айтылат:

"pm.max_children түзүлө турган бала процесстеринин максималдуу санын аныктайт. Бул эң маанилүү директива."
(Булак: PHP-FPM документтери)

Бул авторитеттүү көз караштар биздин тажрыйбабызга толук дал келет, бул оптималдаштыруу логикасы тажрыйбага гана эмес, стандартташтырылган мыкты тажрыйбаларга да негизделгенин далилдейт.

Корутунду: Менин көз караштарым жана негизги цитаталарым

Жогорку параллелдүүлүк сценарийлеринде, CPU кыймылдаткыч, эс тутум күйүүчү май багынын ролун ойнойт, ал эми PHP-FPM флоттун диспетчери болуп саналат.

Кыймылдаткыч канчалык күчтүү болбосун, эгерде күйүүчү май багынын көлөмү жетишсиз болсо, колонна анча алыска бара албайт.

Чыныгы адистер параметрлерди сокурдук менен максималдуу түрдө ашырышпайт, тескерисинче, ысырапкорчулукту жана ашып-ташып кетүүлөрдү болтурбоо үчүн ар бир процесстин эстутумдун колдонулушун так эсептешет.

Оптималдаштыруунун маңызы - чектелген ресурстар менен оптималдуу балансты табуу.

Бул жөн гана технология эмес, ошол эле учурда философия.

Ошондуктан, "ядролордун саны баарын аныктайт" дегенге ишенүүнү токтотуңуз. Параллелдүүлүктүн чегин чындап аныктаган нерсе - бул эс тутумду көзөмөлдөө.

VPS сервериңизди толук кандуу оптималдаштырып, ар бир тамчы эстутумду максималдуу пайдаланыңыз.

Чен Вэйлиангдын блогунда ( https://www.chenweiliang.com/ ) бөлүшүлгөн "8 ядролуу 24 ГБ VPSтин эс тутуму түгөнүп баратабы? HestiaCP астында PHP-FPM процесстер пулун экстремалдык түрдө жөндөө" деген макала сизге пайдалуу болот деп үмүттөнөбүз.

Бул макаланын шилтемеси менен бөлүшүүдөн тартынбаңыз: https://www.chenweiliang.com/cwl-34509.html

Көбүрөөк жашыруун трюктарды ачуу үчүн🔑, биздин Telegram каналыбызга кошулуңуз!

Бөлүшүп, жакса лайк! Сиздин бөлүшүүлөрүңүз жана лайктарыңыз биздин туруктуу мотивациябыз!

 

发表 评论

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

Жылдыруу үчүн Top