PHP-FPM setup: gamita ang pm static para sa maximum performance

PHP-FPM setup: gamita ang pm static para sa maximum performance

Usa ka wala mausab nga bersyon niini nga artikulo orihinal nga gimantala sa haydenjames.io ug gipatik dinhi uban sa iyang pagtugot tagsulat.

Isulti ko kanimo sa mubo kung giunsa ang labing maayo nga pag-configure sa PHP-FPM aron madugangan ang throughput, pagpakunhod sa latency, ug paggamit sa CPU ug memorya nga mas makanunayon. Sa kasagaran, ang linya sa PM (process manager) sa PHP-FPM mao dinamikong, ug kung wala kay igong memorya, mas maayo nga i-install ondemand. Atong itandi ang 2 ka opsyon sa pagkontrol base sa dokumentasyon sa php.net ug tan-awon kung unsa ang kalainan sa akong paborito kanila Walay pulos pm para sa taas nga volume sa trapiko:

pm = dinamiko β€” ang gidaghanon sa mga proseso sa bata gi-configure nga dinamikong gibase sa mosunod nga mga direktiba: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = ondemand - ang mga proseso gihimo sa panginahanglan (sukwahi sa dinamikong paglalang, sa diha nga pm.start_servers gilunsad sa diha nga ang serbisyo magsugod).
pm = static - ang gidaghanon sa mga proseso sa bata gitakda ug gipakita sa parameter pm.max_children.

Alang sa mga detalye, tan-awa kompletong listahan sa mga global nga direktiba php-fpm.conf.

Mga pagkaparehas tali sa PHP-FPM process manager ug sa CPU frequency controller

Mahimong dili kini matukib, apan akong isumpay kini sa hilisgutan sa PHP-FPM configuration. Kinsa ang wala makasinati sa usa ka paghinay sa processor labing menos kausa - sa usa ka laptop, virtual machine o dedikado nga server. Hinumdumi ang CPU frequency scaling? Kini nga mga kapilian magamit alang sa nix ug Windows makapauswag sa pasundayag sa sistema ug pagtubag pinaagi sa pagbag-o sa setting sa throttle sa processor gikan sa ondemand sa performance*. Niining higayona, atong itandi ang mga paghulagway ug tan-awon ang pagkaparehas:

gobernador=ondemand - dinamikong scaling sa processor frequency depende sa kasamtangan nga load. Paspas nga milukso ngadto sa kinatas-ang frequency ug dayon mopakunhod niini samtang modaghan ang mga panahon sa pagkadili aktibo.
gobernador=konserbatibo= dinamikong frequency scaling depende sa kasamtangan nga load. Pagdugang ug pagkunhod sa frequency nga mas hapsay kaysa ondemand.
Gobernador = pasundayag - frequency mao ang kanunay nga maximum.

Alang sa mga detalye, tan-awa bug-os nga listahan sa processor frequency regulator parameters.

Nakita ang pagkaparehas? Gusto nakong ipakita kini nga pagtandi aron makombinsir ka nga kini labing maayo nga gamiton pm static para sa PHP-FPM.

Alang sa parameter sa regulator sa processor performance makatabang nga luwas nga madugangan ang performance tungod kay halos nagsalig kini sa limitasyon sa CPU sa server. Dugang pa niini, siyempre, adunay mga hinungdan usab sama sa temperatura, bayad sa baterya (sa usa ka laptop) ug uban pang mga epekto sa kanunay nga pagpadagan sa processor sa 100%. Gisiguro sa setting sa pasundayag ang labing paspas nga pasundayag sa processor. Basaha, pananglitan, bahin sa force_turbo parameter sa Raspberry Pi, diin ang RPi panel mogamit sa regulator performance, diin ang pag-uswag sa performance mas mamatikdan tungod sa ubos nga CPU clock speed.

Paggamit sa pm static aron makab-ot ang labing taas nga pasundayag sa server

Opsyon sa PHP-FPM pm static kadaghanan nagdepende sa libre nga memorya sa server. Kung ubos ang memorya, mas maayo nga mopili ondemand o dinamikong. Sa laing bahin, kung ikaw adunay memorya, mahimo nimong malikayan ang PHP process manager overhead pinaagi sa pag-set pm Walay pulos sa maximum nga kapasidad sa server. Sa laing pagkasulti, kung maayo ang pagkalkulo sa tanan, kinahanglan nimo nga ma-establisar pm.static sa pinakataas nga gidaghanon sa mga proseso sa PHP-FPM nga mahimong ipatuman, nga wala maghimo mga problema sa ubos nga memorya o cache. Apan dili kaayo taas nga kini mabug-atan sa mga nagproseso ug makatipon sa usa ka hugpong sa mga operasyon sa PHP-FPM nga naghulat nga ipatuman..

PHP-FPM setup: gamita ang pm static para sa maximum performance

Sa screenshot sa ibabaw, ang server adunay pm = static ug pm.max_children = 100, ug kini nagkinahanglan og gibana-bana nga 10 GB gikan sa anaa nga 32. Hatagi'g pagtagad ang gipasiugda nga mga kolum, ang tanan klaro dinhi. Niini nga screenshot adunay gibana-bana nga 200 ka aktibo nga tiggamit (labaw sa 60 ka segundo) sa Google Analytics. Niini nga lebel, gibana-bana nga 70% sa PHP-FPM nga mga proseso sa bata wala gihapon magamit. Kini nagpasabot nga ang PHP-FPM kanunay nga gitakda sa pinakataas nga gidaghanon sa mga kahinguhaan sa server bisan pa sa kasamtangan nga trapiko. Ang usa ka walay pulos nga proseso naghulat alang sa mga peak sa trapiko ug mitubag dayon. Dili nimo kinahanglan nga maghulat hangtod pm maghimo sa mga proseso sa bata ug unya tapuson kini kung matapos na ang panahon pm.process_idle_timeout. Gibutang nako ang bili sa taas kaayo pm.max_requeststungod kay kini usa ka nagtrabaho nga server nga walay memory leaks sa PHP. Mahimo nimong i-install pm.max_requests = 0 uban ang static kung hingpit ka nga masaligon sa naa na ug umaabot nga mga script sa PHP. Apan mas maayo nga i-restart ang mga script sa paglabay sa panahon. Pagbutang og daghang mga hangyo, tungod kay gusto namon nga malikayan ang wala kinahanglana nga gasto sa pm. Pananglitan, labing menos pm.max_requests = 1000 - depende sa gidaghanon pm.max_children ug ang gidaghanon sa mga hangyo matag segundo.

Ang screenshot nagpakita sa sugo Linux ibabaw, gisala ni u (user) ug PHP-FPM username. Ang una lang nga 50 o labaw pa nga mga proseso ang gipakita (wala gyud nako maihap nga eksakto), apan sa panguna nagpakita sa taas nga mga istatistika nga nahiangay sa terminal window. Sa kini nga kaso gi-sort sa% CPU (%CPU). Aron makita ang tanang 100 PHP-FPM nga proseso, padagana ang command:

top -bn1 | grep php-fpm

Kanus-a gamiton ang pm ondemand ug dinamiko

Kung mogamit ka pm dinamikong, ang mga sayup nga sama niini mahitabo:

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

Sulayi ang pagbag-o sa parameter, ang sayup dili mawala, sama sa gihulagway niini nga post sa Serverfault. Sa kini nga kaso, ang kantidad sa pm.min gamay ra kaayo, ug tungod kay ang trapiko sa web nagbag-o kaayo ug adunay taas nga mga taluktok ug lawom nga mga walog, lisud ang igo nga pag-adjust sa pm dinamikong. Kasagaran pm ang gigamit ondemand, ingon gitambag sa parehas nga post. Apan mas grabe pa kini, tungod kay ondemand mohunong sa walay pulos nga mga proseso ngadto sa zero kung adunay gamay o walay trapiko, ug ikaw sa gihapon mahuman sa overhead sa pagbag-o sa trapiko. Gawas kung, siyempre, nagtakda ka usa ka dako nga oras sa paghulat. Ug unya mas maayo nga gamiton pm.static + taas nga numero pm.max_requests.

PM dinamikong ug labi na ondemand mahimong magamit kung daghan ka nga PHP-FPM pool. Pananglitan, nag-host ka daghang mga account sa cPanel o daghang mga website sa lainlaing mga pool. Naa koy server nga, ingnon ta, 100+ ka cpanel account ug mga 200 ka domain, ug pm.static or even dynamic dili makaluwas nako. Ang tanan nga imong gikinahanglan dinhi mao ondemand, human sa tanan, labaw pa sa dos-tersiya sa mga website nakadawat og gamay o walay trapiko, ug uban sa ondemand ang tanan nga mga proseso sa bata mahulog, nga makaluwas kanato sa daghang panumduman! Maayo na lang, ang mga nag-develop sa cPanel nakamatikod niini ug gibutang ang bili sa default ondemand. Kaniadto, kung ang default mao ang dinamikong, PHP-FPM dili angay alang sa busy nga gipaambit nga mga server. Daghan ang migamit suPHP, kay pm dinamikong nahurot ang memorya bisan sa mga idle pool ug cPanel PHP-FPM nga mga account. Lagmit, kung maayo ang trapiko, dili ka ma-host sa usa ka server nga adunay daghang mga PHP-FPM pool (shared hosting).

konklusyon

Kung naggamit ka ug PHP-FPM ug bug-at ang imong trapiko, proseso ang mga managers ondemand ΠΈ dinamikong kay ang PHP-FPM mahimong limitado ang throughput tungod sa ilang kinaiyanhon nga overhead. Sabta ang imong sistema ug i-configure ang mga proseso sa PHP-FPM sumala sa maximum nga kapasidad sa server. Unang set pm.max_children depende sa maximum pm nga paggamit dinamikong o ondemand, ug unya dugangi kini nga kantidad sa usa ka lebel diin ang memorya ug processor molihok nga dili mabug-atan. Mamatikdan nimo kana sa pm static, tungod kay naa nimo ang tanan sa memorya, ang mga spike sa trapiko magpahinabog mas gamay nga mga spike sa CPU sa paglabay sa panahon, ug ang mga average sa load sa server ug CPU mo-level out. Ang kasagaran nga gidak-on sa proseso sa PHP-FPM nagdepende sa web server ug nanginahanglan og manwal nga pag-configure, mao nga mas daghan ang mga automated process managers dinamikong ΠΈ ondemand - mas popular. Nanghinaut ko nga ang artikulo mapuslanon.

DUP Gidugang nga benchmark nga tsart ab. Kung ang mga proseso sa PHP-FPM naa sa memorya, ang pasundayag nagdugang sa gasto sa pagkonsumo sa memorya kung diin sila naglingkod ug naghulat. Pangitaa ang pinakamaayo nga kapilian alang sa imong kaugalingon.

PHP-FPM setup: gamita ang pm static para sa maximum performance

Source: www.habr.com

Idugang sa usa ka comment