Konfigurera PHP-FPM: AnvÀnd pm static för maximal prestanda

Konfigurera PHP-FPM: AnvÀnd pm static för maximal prestanda

Den oredigerade versionen av artikeln publicerades ursprungligen pÄ haydenjames.io och publiceras hÀr med tillstÄnd av dess författare.

Jag ska kort berÀtta hur man bÀst konfigurerar PHP-FPM för att öka genomströmningen, minska latensen och mer stabilt anvÀnda CPU-resurser och minne. Som standard har PM (process manager, processhanterare) i PHP-FPM vÀrdet dynamiskt, och om du har brist pÄ minne Àr det bÀttre att stÀlla in ondemand. LÄt oss jÀmföra tvÄ styralternativ baserat pÄ dokumentationen frÄn php.net och se vad som skiljer mitt favorit statisk pm för hög trafik:

pm = dynamiskt — antalet barnprocesser justeras dynamiskt baserat pĂ„ följande direktiv: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm = ondemand — processer skapas vid behov (till skillnad frĂ„n dynamisk skapelse, dĂ€r pm.start_servers startas vid boot av tjĂ€nsten).
pm = statisk — antalet barnprocesser Ă€r fast och anges med parametern pm.max_children.

Se detaljer i den fullstÀndiga listan över globala direktiv i php-fpm.conf.

Likheterna mellan PHP-FPM:s processhanterare och CPU-frekvensregulatorn

Detta kan verka vara off-topic, men jag tĂ€nker koppla det till Ă€mnet för PHP-FPM-konfigurationen. Har du nĂ„gonsin upplevt att processorn har slĂ€pat sig — pĂ„ en bĂ€rbar dator, virtuell maskin eller dedikerad server? Kommer du ihĂ„g skalningen av CPU-frekvensen? Dessa alternativ, tillgĂ€ngliga för nix och Windows, kan förbĂ€ttra systemets prestanda och svarstid om CPU-regulatorparametern Ă€ndras frĂ„n ondemand till prestanda*. LĂ„t oss nu jĂ€mföra beskrivningarna och se likheterna:

Governor = ondemand — dynamisk skalning av CPU-frekvensen baserat pĂ„ nuvarande belastning. GĂ„r snabbt upp pĂ„ maxfrekvens och minskar den sedan nĂ€r det blir lĂ€ngre perioder av inaktivitet.
Governor = konservativ = dynamisk skalning av frekvensen beroende pĂ„ nuvarande belastning. Ökar och minskar frekvensen mjukare Ă€n ondemand.
Governor = prestanda — frekvensen Ă€r alltid maximal.

Se detaljer i den fullstÀndiga listan över parametrar för CPU-frekvensregulatorn.

Ser du likheterna? Jag ville visa denna jÀmförelse för att övertyga dig om att det bÀsta alternativet Àr att anvÀnda pm statisk för PHP-FPM.

För CPU-regulatorn Àr parametern prestanda hjÀlper till att sÀkert öka prestandan, eftersom den nÀstan helt beror pÄ serverns processorgrÀns. Dessutom finns det sjÀlvklart andra faktorer som temperatur, batteriladdning (i bÀrbara datorer) och andra bieffekter av processorns konstant arbete pÄ 100%. InstÀllningen av prestanda sÀkerstÀller den snabbaste processorn. LÀs till exempel om parametern force_turbo i Raspberry Pi, dÀr RPi-panelen kommer att anvÀnda reglaget prestanda, dÀr prestandaförbÀttringen kommer att mÀrkas mer pÄ grund av den lÄga CPU-taktfrekvensen.

AnvÀndning av pm static för att uppnÄ maximal serverprestanda

PHP-FPM-parametern pm statisk beror mycket pĂ„ det fria minnet pĂ„ servern. Om minnet Ă€r ont Ă€r det bĂ€ttre att vĂ€lja ondemand eller dynamiskt. Å andra sidan, om du har minne, kan du undvika onödiga kostnader för PHP-processhanteraren genom att sĂ€tta pm statisk till serverns maximala kapacitet. Med andra ord, om allt berĂ€knas noggrant, Ă€r det nödvĂ€ndigt att stĂ€lla in pm.static till det maximala antalet PHP-FPM-processer som kan köras, utan att skapa problem med brist pĂ„ minne eller cache. Men inte sĂ„ högt att överbelasta processorerna och fĂ„ en massa PHP-FPM-operationer som vĂ€ntar pĂ„ att utföras..

Konfigurera PHP-FPM: AnvÀnd pm static för maximal prestanda

PĂ„ skĂ€rmdumpen ovan Ă€r servern instĂ€lld pĂ„ pm = static och pm.max_children = 100, och detta tar ungefĂ€r 10 GB av de 32 som finns. Observera de markerade kolumnerna, hĂ€r Ă€r allt tydligt. PĂ„ denna skĂ€rmdump var det ungefĂ€r 200 aktiva anvĂ€ndare (mer Ă€n 60 sekunder) i Google Analytics. PĂ„ denna nivĂ„ Ă€r ungefĂ€r 70% av PHP-FPM:s underprocesser fortfarande inaktiva. Det betyder att PHP-FPM alltid Ă€r instĂ€lld pĂ„ att anvĂ€nda serverns maximala resurskapacitet oavsett nuvarande trafik. Den inaktiva processen vĂ€ntar pĂ„ trafiktoppar och reagerar omedelbart. Du behöver inte vĂ€nta pĂ„ att pm skapar underprocesser, och sedan avslutar dem nĂ€r perioden pm.process_idle_timeout. Jag har stĂ€llt in ett mycket stort vĂ€rde för pm.max_requests, eftersom detta Ă€r en arbetsserver utan minneslĂ€ckor i PHP. Du kan stĂ€lla in pm.max_requests = 0 med static, om du Ă€r helt sĂ€ker pĂ„ de nuvarande och framtida PHP-skripten. Men det Ă€r bĂ€ttre att starta om skripten med tiden. SĂ€tt ett stort antal förfrĂ„gningar, eftersom vi vill undvika onödiga pm-kostnader. Till exempel minst pm.max_requests = 1000 — beroende pĂ„ antalet pm.max_children och antal förfrĂ„gningar per sekund.

PÄ skÀrmdumpen visas kommandot Linux top, filtrerat efter u (anvÀndare) och PHP-FPM-anvÀndarnamn. Visar bara de 50 första processerna (har inte rÀknat exakt), men i grund och botten visar top topstatistik som placeras i terminalfönstret. I det hÀr fallet med sortering efter % CPU (%CPU). För att se alla 100 PHP-FPM-processer, utför kommandot:

top -bn1 | grep php-fpm

NÀr man anvÀnder pm ondemand och dynamic

Om man anvÀnder pm dynamiskt, uppstÄr sÄdana fel:

WARNING: [pool xxxx] verkar vara upptagen (du kan behöva öka pm.start_servers, eller pm.min/max_spare_servers), skapar 32 barn, det finns 4 inaktiva, och 59 totalt barn

Försök att Àndra parametern, felet kommer inte försvinna, som beskrivs i detta inlÀgg pÄ Serverfault. I det hÀr fallet var vÀrdet pÄ pm.min för litet, och eftersom web trafik varierar kraftigt med höga toppar och djupa dalar Àr det svÄrt att stÀlla in pm pÄ ett korrekt sÀtt. dynamiskt. Oftast anvÀnds pm ondemand, som rekommenderas i samma inlÀgg. Men det Àr Ànnu vÀrre, eftersom ondemand det stÀnger inaktiva processer till noll nÀr det Àr lite eller ingen trafik, och i slutÀnden kommer ni att fÄ kÀmpa med kostnaderna vid trafikförÀndringar. Om ni inte har stÀllt in en lÄng vÀntetid. Och dÄ Àr det bÀttre att anvÀnda pm.static + ett högt antal pm.max_requests.

PM dynamiskt och sÀrskilt ondemand kan vara anvÀndbart om ni har flera PHP-FPM-pooler. Till exempel, om ni hostar flera cPanel-konton eller flera webbplatser i olika pooler. Jag har en server dÀr, lÄt oss sÀga, 100+ cPanel-konton och cirka 200 domÀner, och pm.static eller till och med dynamic skulle inte rÀdda mig. HÀr behövs bara ondemand, eftersom mer Àn tvÄ tredjedelar av webbplatserna fÄr lite trafik eller ingen alls, och med ondemand kommer alla underprocesser att försvinna, vilket sparar massor av minne! Som tur Àr har utvecklarna av cPanel mÀrkt detta och stÀllt in standardvÀrdet ondemand. Tidigare, nÀr standardvÀrdet var dynamiskt, var PHP-FPM helt enkelt olÀmpligt för belastade delade servrar. MÄnga anvÀnde suPHP, dÀrför att pm dynamiskt anvÀnde minne Àven med inaktiva pooler och cPanel-konton av PHP-FPM. Troligtvis kommer ni, med bra trafik, inte att hosta pÄ en server med ett stort antal PHP-FPM-pooler (delad hosting).

Slutsats

Om ni anvĂ€nder PHP-FPM och ni har seriös trafik, kommer processcheferna ondemand och dynamiskt för PHP-FPM att begrĂ€nsa kapaciteten pĂ„ grund av de inneboende kostnaderna. Undersök ert system och konfigurera PHP-FPM-processerna enligt serverns maximala kapacitet. SĂ€tt först pm.max_children beroende pĂ„ den maximala anvĂ€ndningen av pm dynamiskt eller ondemand, och öka sedan detta vĂ€rde till en nivĂ„ dĂ€r minne och processor fungerar utan överbelastning. Du kommer att mĂ€rka att pm statisk, eftersom allt lagras i minnet kommer trafiktoppar över tid att orsaka fĂ€rre toppar för processorn, och genomsnittlig server- och processorbelastning kommer att jĂ€mnas ut. Den genomsnittliga storleken pĂ„ PHP-FPM-processen beror pĂ„ webbservern och krĂ€ver manuell justering, dĂ€rför Ă€r mer automatiserade processhanterare dynamiskt och ondemand — mer populĂ€ra. Jag hoppas att artikeln varit till hjĂ€lp.

UPD Benchmark-diagrammet har lagts till ab. Om PHP-FPM-processerna finns i minnet ökar prestandan pÄ grund av minnesanvÀndning, dÀr de sitter och vÀntar. Hitta det optimala alternativet för dig.

Konfigurera PHP-FPM: AnvÀnd pm static för maximal prestanda

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster