8-ytiminen 24GB VPS muisti loppumassa? Äärimmäinen PHP-FPM-prosessipoolin viritys HestiaCP:ssä

Palvelimen käsittelemien samanaikaisten käyttäjien määrä ei riipu ytimien määrästä, vaan kunkin prosessin kuluttamasta muistista.

Tämä lausunto saattaa kuulostaa provokaatiolta, mutta se on todellisin ja tuskallisin kokemus käyttö- ja kunnossapitoalalla.

Miksi muisti on keskeinen pullonkaula?

Monet ihmiset näkevät virtuaalipalvelimen, jossa on 8-ytiminen suoritin ja 24 Gt muistia, ja alitajuisesti ajattelevat, että ne voivat helposti suorittaa satoja PHP-FPM-prosesseja.

Todellisuudessa yhden PHP-prosessin RSS-muistin käyttö on kuitenkin usein jopa 200 Mt.

Tämä on tulos, joka saatiin komentorivin kautta tehdyllä varsinaisella testauksella:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

HestiaCP :n monimutkaisessa kehyksessä ja usean liitännäisen ympäristössä, erityisesti ilman OPcache-optimointia, 200 Mt on normi.

Tämä tarkoittaa, että muisti, ei suoritin, on se kova raja, joka määrittää suurimman mahdollisen samanaikaisuuden.

8-ytiminen 24GB VPS muisti loppumassa? Äärimmäinen PHP-FPM-prosessipoolin viritys HestiaCP:ssä

Suositeltu asetustiedosto (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Parametrien laskentalogiikka ja asetusperuste

KonfigurointiparametritAsetusarvoYtimen laskenta ja asennusperuste
pmdynamicDynaaminen tila mahdollistaa prosessien joustavan lisäämisen tai poistamisen samanaikaisuusvaatimusten perusteella, tasapainottaen vasteaikaa ja muistin käyttöä.
pm.max_children8024 Gt kokonaismuistia ilman järjestelmäydintä ja MySQL/RedisNginxin jälkeen PHP:lle jää noin 16 Gt tilaa.16,384 MB / 200 MB ≈ 81.9Arvon 80 asettaminen voi poistaa kokonaan muistin loppumisen (OOM, Out of Memory) suuren samanaikaisuuden aikana.
pm.aloituspalvelimet16Käynnistyksen yhteydessä esilämmitys asetetaan kaksinkertaiseksi suorittimen ytimien määrään verrattuna (8 ydintä × 2 = 16), jotta palvelu pystyy käsittelemään perus-samanaikaisuuden välittömästi uudelleenkäynnistyksen jälkeen.
pm.min_spare_servers8Aseta suorittimen ytimien määräksi 8 ytintä varmistaaksesi, että uusiin pyyntöihin voidaan vastata milloin tahansa vähäisen liikenteen aikana.
pm.max_spare_servers24Aseta se kolminkertaiseksi suorittimen ytimien määrään verrattuna (8 ydintä × 3 = 24), jotta kohtuullinen määrä prosesseja säilyy liikenteen vähenemisen jälkeen ja että liikenteen vaihtelut ovat lieviä.
pm.max_requests500Jos yksittäinen prosessi saavuttaa 200 Mt:n suuren muistikapasiteetin, pyyntöjen määrän vähentäminen 500:aan ennen tuhoamista ja uudelleenrakentamista voi puhdistaa implisiittiset muistivuodot nopeammin.
pm.process_idle_timeout10s超出 min_spare_servers Käyttämättömät prosessit vapautetaan automaattisesti ja palautetaan järjestelmämuistiin 10 sekunnin kuluttua, jos pyyntöjä ei ole tehty.

Olennaiset tukiasetukset ja optimointiehdotukset

1. Aikakatkaisu krapulanestomekanismeilla

request_terminate_timeout = 60s Se on avainasemassa.

Se voi pakottaa lopettamaan prosesseja, jotka ovat jumissa tietokannan lukkiutumisen tai kolmannen osapuolen API-estojen vuoksi.

Samaan aikaan Nginxin fastcgi_read_timeout Sitä on säilytettävä vähintään 60 sekuntia, muuten asiakas saa sen ennenaikaisesti. 504 Gateway Timeout.

2. Strategioita muistin pullonkaulojen voittamiseksi

Enintään 80 samanaikaista prosessia tarkoittaa, että äärimmäisissä samanaikaisuusolosuhteissa järjestelmä voi käsitellä enintään 80 dynaamista HTTP-pyyntöä samanaikaisesti.

Jos haluat parantaa kapasiteettia entisestään, tulisi keskittyä prosessikohtaisen muistin käytön vähentämiseen.

  • Ota OPcache käyttöön: olemassa php.ini Keskikokoinen kokoonpano opcache.enable=1opcache.memory_consumption=256Tavukoodivälimuisti voi vähentää yksittäisen prosessin muistin käyttöä 200 megatavusta 60–100 megatavuun.
  • Kohtuullinen muistirajoituksen hallinta:将 php.ini keskellä memory_limit Rajoitettu 128M256MYksittäisten poikkeavien skriptien estämiseksirajoittamatonSe kuluttaa paljon muistia.

Kun yhden prosessin muistin käyttö laskee 100 megatavuun...pm.max_children Se voidaan turvallisesti päivittää 150 Lisäksi samanaikaisuusominaisuus on lähes kaksinkertaistunut.

Viitatut arvovaltaiset näkökulmat

Nginxin virallisen dokumentaation suositusten mukaan :

"FastCGI-sovelluksia tulisi aina valvoa aikakatkaisudirektiivien avulla resurssien loppumisen estämiseksi."
(Lähde: Nginx-dokumentaatio)

Virallisessa PHP-käyttöoppaassa lukee selvästi:

"pm.max_children määrittää luotavien lapsiprosessien enimmäismäärän. Tämä on tärkein direktiivi."
(Lähde: PHP-FPM-dokumentaatio)

Nämä arvovaltaiset näkemykset ovat täysin linjassa käytäntöjemme kanssa, mikä osoittaa, että optimointilogiikka ei perustu pelkästään kokemukseen, vaan myös standardoituihin parhaisiin käytäntöihin.

Yhteenveto: Näkökulmani ja keskeiset lainaukset

Korkean samanaikaisuuden skenaarioissa CPU on moottori, muisti on polttoainesäiliö ja PHP-FPM on kaluston lähetin.

Olipa moottori kuinka tehokas tahansa, saattue ei pääse kovin pitkälle, jos polttoainesäiliö ei ole tarpeeksi suuri.

Todelliset asiantuntijat eivät sokeasti maksimoi parametreja, vaan laskevat tarkasti kunkin prosessin muistin käytön välttääkseen sekä muistin hukkaa että ylivuotoa.

Optimoinnin ydin on löytää optimaalinen tasapaino rajallisilla resursseilla.

Tämä ei ole vain teknologiaa, vaan myös filosofiaa.

Lakkaa siis ajattelemasta, että "ytimien lukumäärä määrää kaiken". Rinnakkaisuusrajan todella määrää muistin hallinta.

Ryhdy toimiin ja optimoi VPS:si täysimääräisesti hyödyntäen jokaisen muistipisaran.

发表 评论

您的邮箱地址不会被公开.必填项已用*标注

Siirry alkuun