Мақала анықтамалығы
Сервердің бір уақытта өңдей алатын пайдаланушылар саны оның қанша ядросы бар екеніне емес, әр процесс қанша жад тұтынатынына байланысты.
Бұл мәлімдеме арандату сияқты естілуі мүмкін, бірақ бұл пайдалану және техникалық қызмет көрсету саласындағы ең шынайы және ауыр тәжірибе.
Неліктен жад кілт болып табылады?
Көптеген адамдар 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 емес, жад екенін білдіреді.

Ұсынылған конфигурация файлы (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
Параметрлерді есептеу логикасы және орнату негізі
| Конфигурация параметрлері | Мәнді орнату | Негізгі есептеу және орнату негізі |
|---|---|---|
| pm | dynamic | Динамикалық режим параллельдік талаптарға негізделген процестерді серпімді қосуға немесе жоюға мүмкіндік береді, жауап беру жылдамдығы мен жадты пайдалануды теңестіреді. |
| pm.max_children | 80 | Жүйелік ядроны алып тастағанда, жалпы жады 24 ГБ және MySQL/РедисNginx-тен кейін PHP үшін шамамен 16 ГБ қалады.16,384 MB / 200 MB ≈ 81.9Оны 80-ге орнату жоғары параллельдік кезінде OOM (жад жоқ) функциясын толығымен жоя алады. |
| pm.start_servers | 16 | Қайта іске қосқаннан кейін қызметтің негізгі параллельділікті бірден өңдей алатынын қамтамасыз ету үшін іске қосу кезінде алдын ала қыздыру процессор ядроларының санынан екі есе көп (8 ядро × 2 = 16) етіп орнатылған. |
| pm.min_қосалқы_серверлер | 8 | Трафик аз кезеңдерде кез келген уақытта жаңа сұраныстарға жауап беру үшін CPU ядроларының санын 8-ге орнатыңыз. |
| pm.max_қосалқы_серверлер | 24 | Трафик тоқтағаннан кейін процестердің орташа санын сақтау үшін, ауытқуларды басқару үшін оны CPU ядроларының санынан 3 есеге (8 ядро × 3 = 24) орнатыңыз. |
| pm.max_requests | 500 | Егер бір ғана процесс 200 МБ үлкен базаға жетсе, сұраныстар санын 500-ге дейін азайту процесті бұзып, қайта құрастырады, бұл жасырын жад ағып кетулерін тезірек жоя алады. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers Бос тұрған процестер автоматты түрде босатылады және 10 секунд ішінде сұраныстар болмағаннан кейін жүйелік жадқа қайтарылады. |
Негізгі қолдау параметрлері және оңтайландыру бойынша ұсыныстар
1. Похмельге қарсы тайм-аут механизмі
request_terminate_timeout = 60s Міне, кілт.
Ол дерекқордың тұйықталуына немесе үшінші тарап API бұғатталуына байланысты тұрып қалған процестерді мәжбүрлеп тоқтатуы мүмкін.
Сонымен қатар, Nginx компаниясының fastcgi_read_timeout Оны кем дегенде 60 секунд ұстау керек, әйтпесе клиент оны мерзімінен бұрын алады. 504 Gateway Timeout.
2. Есте сақтау қабілетінің бұзылуын жеңу стратегиялары
Ең көбі 80 бір мезгілдегі процесс дегеніміз, бұл жүйенің бір мезгілде ең көбі 80 динамикалық HTTP сұранысын өңдей алатынын білдіреді.
Егер сіз сыйымдылықты одан әрі жақсартқыңыз келсе, әр процесте жадты пайдалануды азайтуға назар аудару керек.
- OPcache қосу:在
php.iniОрташа конфигурацияopcache.enable=1жәнеopcache.memory_consumption=256Байткодты кэштеу бір процестің жадты пайдалануын 200 МБ-тан 60-100 МБ-қа дейін азайта алады. - memory_limit параметрін ақылға қонымды басқару:将
php.iniортаңғыmemory_limitШектелген128MНемесе256MЖеке қалыптан тыс сценарийлердің алдын алу үшіншектеусізОл көп жадты тұтынады.
Бір процестің жадты пайдалануы 100 МБ-қа дейін төмендегеннен кейін...pm.max_children Оны қауіпсіз түрде жаңартуға болады 150 Сонымен қатар, параллельділік мүмкіндігі екі есеге жуық өсті.
Беделді көзқарастар келтірілді
Ресми Nginx құжаттамасындағы ұсыныстарға сәйкес :
«Ресурстардың таусылуын болдырмау үшін FastCGI қосымшаларын әрқашан тайм-аут директиваларымен бақылау керек.»
(Дереккөз: Nginx құжаттары)
Ресми PHP нұсқаулығында анық көрсетілген:
«pm.max_children жасалатын бала процестерінің максималды санын анықтайды. Бұл ең маңызды директива.»
(Дереккөз: PHP-FPM құжаттамасы)
Бұл беделді көзқарастар біздің тәжірибемізбен толық сәйкес келеді, бұл оңтайландыру логикасының тек тәжірибеге ғана емес, сонымен қатар стандартталған ең жақсы тәжірибелерге де негізделгенін дәлелдейді.
Қорытынды: Менің көзқарастарым және негізгі дәйексөздер
Жоғары параллельділік сценарийлерінде процессор қозғалтқыш, жад отын багісі, ал PHP-FPM автопарк диспетчері болып табылады.
Қозғалтқыш қаншалықты қуатты болса да, егер жанармай багының көлемі жеткіліксіз болса, колонна алысқа бара алмайды.
Нағыз сарапшылар параметрлерді соқыр түрде максималды түрде арттырмайды, керісінше, шығындар мен толып кетудің алдын алу үшін әрбір процестің жадты пайдалануын дәл есептейді.
Оңтайландырудың мәні шектеулі ресурстармен оңтайлы тепе-теңдікті табу болып табылады.
Бұл тек технология ғана емес, сонымен қатар философия.
Сондықтан, «ядролар саны бәрін анықтайды» дегенге сенуді тоқтатыңыз. Параллельділік шегін шынымен анықтайтын нәрсе - жадты бақылауыңыз.
Әр әрекетті жасап, VPS серверіңізді толық әлеуетіне дейін оңтайландырыңыз, жадтың әрбір тамшысын барынша пайдаланыңыз.
Чен Вэйлиангтың блогында ( https://www.chenweiliang.com/ ) бөлісілген "8 ядролы 24 ГБ VPS жады таусылып жатыр ма? HestiaCP астында PHP-FPM процесінің пулын экстремалды түрде баптау" мақаласы сізге пайдалы болады деп үміттенемін.
Осы мақаланың сілтемесін бөлісуден тартынбаңыз: https://www.chenweiliang.com/cwl-34509.html
