tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

PHP-FPM: erilliset masterit

Sisällys

Erilliset masterit

https://stackoverflow.com/questions/37369035/how-to-setup-multiple-php-fpm-masters-on-ubuntu-14-04

Kun tekee erilliset poolit, joko samaan www.conf tiedostoon tai omina erillisinä tiedostoina, niin ne ovat silti kaikki yhden ja saman master-prosessin takana. Kaikki poolit sammutetaan ja käynnistetään yhtä aikaa, vaikka vain yhtä olisi muokattu. Silloin myös keskeytetään kaikkien työntekijöiden hommat ja pakotetaan ne aloittamaan uudelleen alusta.

Ei tuolla ole suurtakaan merkitystä matalilla liikennemäärillä, mutta jollain kiireisemmällä sivustolla koko PHP-FPM prosessin sammuttaminen ja käynnistäminen saattavat aiheuttaa hyvin lyhytaikaisen hidastumisen. Se, että onko tuolla aitoa merkitystä, on sitten oma juttunsa. Silti on hyvä tietää, että siihenkin voidaan vaikuttaa.

Yleensä useampaa masteria käytetään isommissa kokoonpanoissa. Osaksi toki siksi, että ei tarvitse sammuttaa ja käynnistää ehkä satoihin sivustoihin vaikuttavaa palvelua, vaan voi rajoittaa vaikutusta. Useamman masterin käyttöön löytyy toinenkin syy, joka sen sijaan pätee varsinkin pienemmillä virtuaalipalvelimilla. Se on PHP:n välimuistittaminen.

Muistissa olevat PHP-scriptejä cacheen laittavat, objekti cachet, ovat käytössä lähes joka paikassa. OPCache lienee useimmille tuttu, eikä varmasti APC ole sekään tuntematon. Ne rakentavat omat välimuistinsa masterin mukaan, eli pid määrää prosessin.

Se tarkoittaa sitä, että jos saman php7.3-fpm.pid takana on kaikki poolit, niin jokaisen poolin sekä siihen liittyvän sivuston välimuistit rakennetaan samaan paikkaan. Muistia alkaa yhtä äkkiä kulumaan enemmän, kun yhteinen kakku laajenee. Oikeammin se ei laajene, vaan muistivarauksen täytyy olla niin iso, että se pystyy kattamaan kaikkien sivustojen välimuistitukset.

Taaskaan tuo ei ole ongelma, jos on vain muutama sivusto edes siedettävällä määrällä muistia. Mutta jos on änkenyt dropletinsa täyteen sivustoja ja yrittää hyödyntää muistista jokaisen bitin puolikkaankin, niin muistissa majailevan välimuistin koolla alkaa olla jo merkitystä.

Jotta objekti cachen, vaikka OPCachen, ohjaaminen käynnistämistä ja sammuttamista myöten saataisiin sidottua pooliin, niin jokaiselle poolille tarvitaan oma master.

  • jokainen pooli tarvitsee oman init.d scriptin, jotta systemctl start/stop onnistuisi erillisinä
  • jokainen pooli tarvitsee oman php-fpm.conf tiedoston, joka luo yksilöllisen pid-tiedoston