8-јадрен 24GB VPS останува без меморија? Практичен водич за екстремно подесување на PHP-FPM процесниот базен со HestiaCP

Бројот на истовремени корисници што еден сервер може да ги обработи не зависи од тоа колку јадра има, туку од тоа колку меморија троши секој процес.

Оваа изјава може да звучи како провокација, но тоа е најреалното и најболното искуство во индустријата за работење и одржување.

Зошто меморијата е клучното тесно грло?

Многу луѓе гледаат VPS со 8-јадрен процесор и 24GB меморија и потсвесно мислат дека лесно можат да извршуваат стотици PHP-FPM процеси.

Сепак, во реалноста, употребата на RSS меморија од еден PHP процес често достигнува и до 200 MB.

Ова е резултатот добиен преку вистинско тестирање преку командна линија:

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

Во сложената рамка и околината со повеќе додатоци на HestiaCP , особено без оптимизација на OPcache, 200MB е норма.

Ова значи дека меморијата, а не процесорот, е цврстата граница што ја одредува максималната истовременост.

8-јадрен 24GB VPS останува без меморија? Практичен водич за екстремно подесување на PHP-FPM процесниот базен со HestiaCP

Препорачана конфигурациска датотека (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_children8024GB вкупна меморија минус системското јадро и MySQL,/RedisПо Nginx, остануваат приближно 16GB за PHP.16,384 MB / 200 MB ≈ 81.9Поставувањето на 80 може целосно да го елиминира OOM (Нема меморија) за време на висока истовременост.
pm.start_servers16Предзагревањето при стартување е поставено на двојно поголем број јадра на процесорот (8 јадра × 2 = 16) за да се осигури дека услугата може веднаш да се справи со основната истовременост по рестартирањето.
pm.min_spare_servers8Поставете го бројот на јадра на процесорот на 8 јадра за да се осигурате дека на новите барања може да се одговори во секое време за време на периоди со низок сообраќај.
pm.max_spare_servers24Поставете го на 3 пати поголем број јадра на процесорот (8 јадра × 3 = 24) за да задржите умерен број на процеси откако ќе се намали сообраќајот, со цел да се справите со мали флуктуации.
pm.max_requests500Ако еден процес достигне голема база од 200MB, намалувањето на бројот на барања на 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: 在 php.ini Средна конфигурација opcache.enable=1 и opcache.memory_consumption=256Кеширањето на бајткод може да ја намали употребата на меморија на еден процес од 200MB на 60~100MB.
  • Разумна контрола на memory_limit:将 php.ini среден memory_limit Ограничено на 128M Или 256MЗа да се спречат индивидуални абнормални сценаријанеограниченТроши многу меморија.

Откако употребата на меморија од еден процес ќе падне на 100MB...pm.max_children Може безбедно да се надгради на 150 Покрај тоа, можноста за истовремено работење е речиси двојно зголемена.

Цитирани авторитетни гледишта

Според препораките во официјалната документација за Nginx :

„FastCGI апликациите секогаш треба да се следат со директиви за истекување на времето за да се спречи исцрпување на ресурсите.“
(Извор: Nginx Docs)

Во официјалниот прирачник за PHP јасно е наведено:

„pm.max_children го дефинира максималниот број на детски процеси што треба да се креираат. Ова е најважната директива.“
(Извор: PHP-FPM документација)

Овие авторитативни ставови се совршено усогласени со нашите практики, докажувајќи дека логиката за оптимизација не се базира само на искуство, туку и на стандардизирани најдобри практики.

Заклучок: Мои гледишта и клучни цитати

Во сценарија со висока истовременост, процесорот е моторот, меморијата е резервоарот за гориво, а PHP-FPM е диспечерот на флотата.

Без разлика колку е моќен моторот, ако резервоарот за гориво не е доволно голем, конвојот нема да оди многу далеку.

Вистинските експерти не ги максимизираат параметрите на слепо, туку прецизно ја пресметуваат употребата на меморијата на секој процес за да избегнат и губење и прелевање.

Суштината на оптимизацијата е да се пронајде оптимална рамнотежа со ограничени ресурси.

Ова не е само технологија, туку и филозофија.

Затоа, престанете да верувате дека „бројот на јадра одредува сè“. Она што навистина го одредува ограничувањето на истовременоста е вашата контрола врз меморијата.

Преземете акција и оптимизирајте го вашиот VPS до неговиот максимален потенцијал, искористувајќи ја максимално секоја капка меморија.

Се надеваме дека статијата „8-јадрен 24G VPS останува без меморија? Екстремно подесување на PHP-FPM процесниот базен под HestiaCP“ споделена на блогот на Чен Вејлијанг ( https://www.chenweiliang.com/ ) ќе ви биде корисна.

Слободно споделете го линкот до овој напис: https://www.chenweiliang.com/cwl-34509.html

За да отклучите повеќе скриени трикови🔑, добредојдени сте да се придружите на нашиот Телеграм канал!

Споделете и лајкнете ако ви се допаѓа! Вашите споделувања и лајкови се наша постојана мотивација!

 

评论

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

Дојдете до врв