Configurazione PHP-FPM: utilizate pm static per u massimu rendiment

Configurazione PHP-FPM: utilizate pm static per u massimu rendiment

Una versione inedita di questu articulu hè stata publicata urigginariamente haydenjames.io è publicatu quì cù u so permessu autore.

Vi dicu in poche parole u megliu cunfigurà PHP-FPM per aumentà u throughput, riduce a latenza, è aduprà CPU è memoria più coerente. Per automaticamente, a linea PM (gestore di prucessu) in PHP-FPM hè dinamichi, è se ùn avete micca abbastanza memoria, allora hè megliu installà à dumanda. Comparamu 2 opzioni di cuntrollu basatu nantu à a documentazione php.net è vede cumu u mo preferitu difiere da elli static pm per u trafficu altu volume:

pm = dinamica - u numeru di prucessi di u zitellu hè cunfiguratu dinamicamente basatu annantu à e seguenti direttive: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
pm = à dumanda - i prucessi sò creati nantu à a dumanda (in uppusizione à a creazione dinamica, quandu pm.start_servers sò lanciati quandu u serviziu principia).
pm = staticu - u numeru di prucessi di u zitellu hè fissu è hè indicatu da u paràmetru pm.max_children.

Per i dettagli, vede Lista cumpleta di direttive globale php-fpm.conf.

Similitudini trà u gestore di processu PHP-FPM è u controller di frequenza di CPU

Questu pò sembra offtopic, ma aghju da ligà questu à u tema di a cunfigurazione PHP-FPM. Quale hè chì ùn hà micca sperimentatu un rallentamentu di u processatore almenu una volta - in un laptop, macchina virtuale o servitore dedicatu? Ricurdativi di a scala di frequenza di CPU? Queste opzioni sò dispunibuli per nix è Windows ponu migliurà u rendiment di u sistema è a reattività cambiendu l'impostazione di l'acceleratore di u processore à dumanda nantu prestazione*. Sta volta, paragunemu e descrizzioni è fighjemu e similitudini:

guvernatore = à la demande - scala dinamica di a frequenza di u processatore secondu a carica attuale. Salta rapidamente à a frequenza massima è poi a riduce cum'è i periodi di inattività aumentanu.
guvernatore = cunservatore = scala di frequenza dinamica secondu a carica attuale. Aumenta è diminuisce a frequenza più liscia chè à a dumanda.
Governatore = performance - a frequenza hè sempre massima.

Per i dettagli, vede Lista completa di parametri di regulatore di frequenza di u processatore.

Vede e similitudini? Vuliu mustrà stu paragone per cunvince chì hè megliu aduprà pm staticu per PHP-FPM.

Per u paràmetru di regulatore di processore spettaculu aiuta à aumentà in modu sicuru u rendiment perchè hè quasi interamente dipende da u limitu CPU di u servitore. In più di questu, sicuru, ci sò ancu fatturi cum'è a temperatura, a carica di a bateria (in un laptop) è altri effetti secundari di u processatore constantemente in 100%. L'impostazione di prestazione assicura u rendimentu più veloce di u processore. Leghjite, per esempiu, circa force_turbo paràmetru in Raspberry Pi, cù quale u pannellu RPi aduprà u regulatore spettaculu, induve a migliione di u rendiment serà più notevule per via di a bassa velocità di clock CPU.

Utilizendu pm static per ottene u massimu rendimentu di u servitore

Opzione PHP-FPM pm staticu dipende largamente da a memoria libera in u servitore. Se a memoria hè bassa, hè megliu di sceglie à dumanda o dinamichi. Per d 'altra banda, sè vo avete memoria, pudete evità l'overhead di u gestore di processu PHP per stabilisce pm static à a capacità massima di u servitore. In altri palori, se tuttu hè calculatu bè, avete bisognu di stabilisce pm.static à u voluminu massimu di prucessi PHP-FPM chì ponu esse eseguiti, senza creà prublemi cù poca memoria o cache. Ma ùn hè micca cusì altu chì sopraffa i processori è accumula una mansa di operazioni PHP-FPM chì aspettanu per esse eseguite..

Configurazione PHP-FPM: utilizate pm static per u massimu rendiment

In a screenshot sopra, u servitore hà pm = static è pm.max_children = 100, è questu occupa circa 10 GB fora di i dispunibuli 32. Prestate attenzione à e culonni evidenziati, tuttu hè chjaru quì. In questa screenshot ci era circa 200 utilizatori attivi (più di 60 seconde) in Google Analytics. À questu livellu, circa 70% di i prucessi di u zitellu PHP-FPM sò sempre inattivi. Questu significa chì PHP-FPM hè sempre stabilitu à a quantità massima di risorse di u servitore indipendentemente da u trafficu attuale. Un prucessu inattivu aspetta i picchi di trafficu è risponde istantaneamente. Ùn avete micca aspittà finu à pm crià i prucessi di u zitellu è poi finisce quandu u periodu scade pm.process_idle_timeout. Aghju stabilitu u valore à assai altu pm.max_requestsperchè questu hè un servitore chì funziona senza perdita di memoria in PHP. Pudete installà pm.max_requests = 0 cun static s'è vo site cumplettamente cunfidendu in i script PHP esistenti è futuri. Ma hè megliu per rinvià i script cù u tempu. Stabilite un gran numaru di richieste, perchè vulemu evità i costi inutili di pm. Per esempiu, almenu pm.max_requests = 1000 - secondu a quantità pm.max_children è u numeru di richieste per seconda.

A screenshot mostra u cumandamentu Linux top, filtrata da u (user) è PHP-FPM username. Solu i primi 50 o più prucessi sò mostrati (ùn aghju micca cuntatu esattamente), ma essenzialmente a cima mostra e statistiche superiore chì si mette in a finestra di u terminal. In questu casu ordinatu da % CPU (%CPU). Per vede tutti i 100 processi PHP-FPM, eseguite u cumandimu:

top -bn1 | grep php-fpm

Quandu aduprà pm on demand è dinamica

Se utilizate pm dinamichi, errore cum'è questu accade:

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

Pruvate à cambià u paràmetru, l'errore ùn andarà micca, cum'è descrittu in questu post in Serverfault. In questu casu, u valore pm.min era troppu chjucu, è postu chì u trafficu web varieghja tantu è hà alti picchi è valli profondi, hè difficiule d'aghjustà bè pm. dinamichi. Di solitu pm hè adupratu à dumanda, cum'è cunsigliatu in u listessu postu. Ma questu hè ancu peghju, perchè à dumanda finisce i prucessi inattivi à cero quandu ci hè pocu o nimu di trafficu, è vi sempre finiscinu cù u overhead di cambià u trafficu. A menu chì, sicuru, avete stabilitu un tempu d'attesa enormu. È tandu hè megliu aduprà pm.static + numeru altu pm.max_requests.

PM dinamichi è sopratuttu à dumanda pò esse utile se avete parechje piscine PHP-FPM. Per esempiu, ospitate parechji cunti cPanel o parechji siti web in diverse piscine. Aghju un servitore cù, per dì, 100+ cunti cpanel è circa 200 duminii, è pm.static o ancu dinamica ùn mi salvassi micca. Tuttu ciò chì avete bisognu quì hè à dumanda, Dopu tuttu, più di dui terzi di i siti web ricevenu pocu o micca trafficu, è cun à dumanda tutti i prucessi di u zitellu cascanu, chì ci salverà assai memoria! Fortunatamente, i sviluppatori di cPanel anu nutatu questu è stabiliscenu u valore predeterminatu à dumanda. Nanzu, quandu u predefinitu era dinamichi, PHP-FPM ùn era micca adattatu per i servitori spartuti occupati. Parechji anu utilizatu suPHP, perchè pm dinamichi memoria cunsumata ancu cù pools idle è cunti cPanel PHP-FPM. Hè assai prubabile, se u trafficu hè bonu, ùn sarete micca ospitu in un servitore cù un gran numaru di piscine PHP-FPM (hosting spartutu).

cunchiusioni

Sè vo aduprate PHP-FPM è u vostru trafficu hè pesante, i gestori di prucessu à dumanda и dinamichi per PHP-FPM serà un throughput limitatu per via di u so overhead inherente. Capisce u vostru sistema è cunfigurà i prucessi PHP-FPM secondu a capacità massima di u servitore. Prima set pm.max_children secondu u massimu usu pm dinamichi o à dumanda, è poi aumentà stu valore à un livellu induve a memoria è u processatore travaglià senza esse sovraccaricatu. Avete nutatu chì cun pm staticu, Siccomu avete tuttu in memoria, i picchi di u trafficu pruvucaranu menu picchi di CPU cù u tempu, è i medii di carica di u servitore è di u CPU si stendenu. A dimensione media di u prucessu PHP-FPM dipende da u servitore web è esige una cunfigurazione manuale, cusì i gestori di prucessu più automatizati sò dinamichi и à dumanda - più populari. Spergu chì l'articulu hè stata utile.

DUP Graficu di benchmark aghjuntu ab. Se i prucessi PHP-FPM sò in memoria, u rendiment aumenta à a spesa di u cunsumu di memoria induve si sentenu è aspetta. Truvate a megliu opzione per voi stessu.

Configurazione PHP-FPM: utilizate pm static per u massimu rendiment

Source: www.habr.com

Add a comment