Nastavenie PHP-FPM: pre maximálny výkon použite statický pm

Nastavenie PHP-FPM: pre maximálny výkon použite statický pm

Neupravená verzia tohto článku bola pôvodne publikovaná dňa haydenjames.io a zverejnené tu s jej súhlasom autora.

Poviem vám v skratke, ako najlepšie nakonfigurovať PHP-FPM na zvýšenie priepustnosti, zníženie latencie a konzistentnejšie využitie CPU a pamäte. V predvolenom nastavení je riadok PM (správca procesov) v PHP-FPM dynamický, a ak nemáte dostatok pamäte, je lepšie nainštalovať na požiadanie. Poďme si porovnať 2 možnosti ovládania na základe dokumentácie php.net a uvidíme, ako sa od nich líši môj obľúbený statický poobede pre veľkú premávku:

pm = dynamický — počet podriadených procesov sa konfiguruje dynamicky na základe nasledujúcich smerníc: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = na požiadanie - procesy sa vytvárajú na požiadanie (na rozdiel od dynamického vytvárania, keď sa pri spustení služby spúšťajú pm.start_servers).
pm = statický — počet podriadených procesov je pevný a je označený parametrom pm.max_children.

Podrobnosti nájdete v časti kompletný zoznam globálnych direktív php-fpm.conf.

Podobnosti medzi správcom procesov PHP-FPM a radičom frekvencie CPU

Môže sa to zdať mimo tému, ale prepojím to s témou konfigurácie PHP-FPM. Kto aspoň raz nezažil spomalenie procesora – na notebooku, virtuálnom stroji alebo dedikovanom serveri. Pamätáte si škálovanie frekvencie CPU? Tieto možnosti sú k dispozícii pre nix a Windows môžu zlepšiť výkon a odozvu systému zmenou nastavenia škrtiacej klapky procesora z na požiadanie na výkon*. Tentokrát si porovnajme popisy a pozrime sa na podobnosti:

guvernér=na požiadanie — dynamické škálovanie frekvencie procesora v závislosti od aktuálneho zaťaženia. Rýchlo preskočí na maximálnu frekvenciu a potom ju zníži so zvyšujúcim sa obdobím nečinnosti.
guvernér=konzervatívec= dynamické frekvenčné škálovanie v závislosti od aktuálneho zaťaženia. Zvyšuje a znižuje frekvenciu plynulejšie ako na požiadanie.
Guvernér = výkon — frekvencia je vždy maximálna.

Podrobnosti nájdete v časti úplný zoznam parametrov regulátora frekvencie procesora.

Vidíte podobnosti? Toto porovnanie som chcel ukázať, aby som vás presvedčil, že najlepšie je použiť pm statické pre PHP-FPM.

Pre parameter regulátora procesora výkon pomáha bezpečne zvyšovať výkon, pretože je takmer úplne závislý od limitu CPU servera. Okrem toho sú tu samozrejme aj faktory ako teplota, nabitie batérie (v notebooku) a ďalšie vedľajšie efekty neustáleho chodu procesora na 100%. Nastavenie výkonu zaisťuje najrýchlejší výkon procesora. Prečítajte si napríklad o parameter force_turbo v Raspberry Pis ktorým bude RPi panel využívať regulátor výkon, kde bude zlepšenie výkonu výraznejšie vďaka nízkej frekvencii procesora.

Použitie statických pm na dosiahnutie maximálneho výkonu servera

Možnosť PHP-FPM pm statické do značnej miery závisí od voľnej pamäte na serveri. Ak je pamäť málo, je lepšie si vybrať na požiadanie alebo dynamický. Na druhej strane, ak máte pamäť, môžete sa vyhnúť réžii správcu procesov PHP nastavením pm statický na maximálnu kapacitu servera. Inými slovami, ak je všetko vypočítané dobre, musíte sa ustanoviť pm.statický na maximálny objem procesov PHP-FPM, ktoré je možné vykonať, bez vytvárania problémov s nízkou pamäťou alebo vyrovnávacou pamäťou. Ale nie tak vysoko, aby to zahltilo procesory a nahromadilo veľa operácií PHP-FPM čakajúcich na vykonanie.

Nastavenie PHP-FPM: pre maximálny výkon použite statický pm

Na obrázku vyššie má server pm = statické a pm.max_children = 100, a to zaberá približne 10 GB z dostupných 32. Pozor na zvýraznené stĺpce, tu je všetko jasné. Na tejto snímke obrazovky bolo približne 200 aktívnych používateľov (viac ako 60 sekúnd) v službe Google Analytics. Na tejto úrovni je približne 70 % podriadených procesov PHP-FPM stále nečinných. To znamená, že PHP-FPM je vždy nastavené na maximálne množstvo serverových prostriedkov bez ohľadu na aktuálnu prevádzku. Nečinný proces čaká na špičky a okamžite reaguje. Nemusíte čakať, kým pm vytvorí podriadené procesy a potom ich po uplynutí obdobia ukončí pm.process_idle_timeout. Hodnotu som nastavil na veľmi vysokú pm.max_requestspretože toto je funkčný server bez úniku pamäte v PHP. Môžete nainštalovať pm.max_requests = 0 so statickým, ak ste si úplne istí existujúcimi a budúcimi skriptami PHP. Ale po čase je lepšie skripty znova spustiť. Nastavte veľký počet požiadaviek, pretože sa chceme vyhnúť zbytočným nákladom na pm. Napríklad aspoň pm.max_requests = 1000 - v závislosti od množstva pm.max_children a počet žiadostí za sekundu.

Snímka obrazovky zobrazuje príkaz Linux top, filtrované podľa u (používateľa) a používateľského mena PHP-FPM. Zobrazuje sa iba prvých približne 50 procesov (nepočítal som presne), ale v podstate top zobrazuje najlepšie štatistiky, ktoré sa zmestia do okna terminálu. V tomto prípade zoradené podľa % CPU (% CPU). Ak chcete zobraziť všetkých 100 procesov PHP-FPM, spustite príkaz:

top -bn1 | grep php-fpm

Kedy použiť pm ondemand a dynamic

Ak použijete pm dynamický, vyskytujú sa takéto chyby:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

Skúste zmeniť parameter, chyba nezmizne, napr popísané v tomto príspevku na Serverfault. V tomto prípade bola hodnota pm.min príliš malá, a keďže návštevnosť webu sa veľmi mení a má vysoké vrcholy a hlboké údolia, je ťažké primerane upraviť pm dynamický. Zvyčajne sa používa pm na požiadanie, ako je odporúčané v tom istom príspevku. Ale toto je ešte horšie, pretože na požiadanie ukončí nečinné procesy na nulu, keď je malá alebo žiadna prevádzka, a stále budete mať réžiu na zmenu prevádzky. Pokiaľ si, samozrejme, nenastavíte obrovskú čakaciu dobu. A potom je lepšie použiť pm.statický + vysoké číslo pm.max_requests.

PM dynamický a najmä na požiadanie môže sa hodiť, ak máte viacero fondov PHP-FPM. Napríklad hosťujete viacero účtov cPanel alebo viacero webových stránok v rôznych fondoch. Mám server s povedzme 100+ účtami cpanel a asi 200 doménami a pm.static alebo dokonca dynamická by ma nezachránila. Všetko, čo potrebujete, je tu na požiadanieKoniec koncov, viac ako dve tretiny webových stránok majú malú alebo žiadnu návštevnosť na požiadanie odpadnú všetky detské procesy, čo nám ušetrí veľa pamäte! Našťastie si to vývojári cPanel všimli a nastavili hodnotu na predvolenú na požiadanie. Predtým, keď bola predvolená hodnota dynamický, PHP-FPM vôbec nebolo vhodné pre vyťažené zdieľané servery. Mnohí využili suPHP, pretože pm dynamický spotrebovanej pamäte aj pri nečinných fondoch a účtoch cPanel PHP-FPM. S najväčšou pravdepodobnosťou, ak je návštevnosť dobrá, nebudete hosťovaní na serveri s veľkým počtom fondov PHP-FPM (zdieľaný hosting).

Záver

Ak používate PHP-FPM a vaša prevádzka je veľká, manažéri procesov na požiadanie и dynamický pre PHP-FPM bude obmedzená priepustnosť kvôli ich vlastnej réžii. Pochopte svoj systém a nakonfigurujte procesy PHP-FPM podľa maximálnej kapacity servera. Prvý set pm.max_children v závislosti od maximálneho využitia pm dynamický alebo na požiadaniea potom túto hodnotu zvýšte na úroveň, pri ktorej budú pamäť a procesor fungovať bez preťaženia. Všimnete si, že s pm statické, keďže máte všetko v pamäti, špičky prevádzky spôsobia časom menej špičiek CPU a priemerné zaťaženie servera a CPU sa vyrovná. Priemerná veľkosť procesu PHP-FPM závisí od webového servera a vyžaduje manuálnu konfiguráciu, takže manažéri procesov sú viac automatizovaní dynamický и na požiadanie - populárnejšie. Dúfam, že článok bol užitočný.

DUP Pridaný referenčný graf ab. Ak sú procesy PHP-FPM v pamäti, výkon sa zvyšuje na úkor spotreby pamäte, kde sedia a čakajú. Nájdite pre seba tú najlepšiu možnosť.

Nastavenie PHP-FPM: pre maximálny výkon použite statický pm

Zdroj: hab.com

Pridať komentár