Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11218|Vastaus: 4

PHP-FPM-parametrien konfigurointi ja viritys

[Kopioi linkki]
Julkaistu 26.7.2017 9.20.54 | | |
php-fpm.conf Tärkeät parametrit selitetään yksityiskohtaisesti

pid = run/php-fpm.pid
#pid设置 suositellaan ottamaan var/run/php-fpm.pid käyttöön asennuskansiossa oletuksena

error_log = loki/php-fpm.log
#错误日志 oletusarvo on var/log/php-fpm.log asennuskansiossa

log_level = ilmoitus
#错误级别. Saatavilla olevat tasot ovat: hälytys, virhe, varoitus, ilmoitus, debuging. Oletuksena: ilmoitus.

emergency_restart_threshold = 60
emergency_restart_interval = 60-luku
# tarkoittaa, että jos SIGSEGV- tai SIGBUS-virheitä sisältävien php-cgi-prosessien määrä ylittää emergency_restart_threshold emergency_restart_interval-arvossa, php-fpm käynnistetään sujuvasti uudelleen. Nämä kaksi vaihtoehtoa ovat yleensä oletusarvoisia.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Käytettävissä olevat yksiköt: s (sekunti), m (minuutit), h (tunnit) tai d (päivät) Oletusyksiköt: s (sekunnit). Oletus: 0.

daemonize = kyllä
#后台执行fpm oletusarvo on kyllä, ja jos haluat debugata, voit muuttaa sen ei:ksi. FPM:ssä eri asetuksia voidaan käyttää useiden prosessipoolien ajamiseen. Nämä asetukset voidaan asettaa erikseen kullekin prosessipoolille.

kuuntele = 127.0.0.1:9000
#fpm监听端口, eli PHP:n käsittelemä osoite nginxissä, on yleensä oletusarvo. Saatavilla olevat muodot ovat: 'ip:port', 'port', '/path/to/unix/socket'. Jokainen prosessipooli täytyy perustaa.

listen.backlog = -1
#backlog数 -1 tarkoittaa rajatonta, käyttöjärjestelmän määräämä, kommentoi vain tämä rivi. Lähde: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP aseta mikä tahansa niin, ettei IP-osoite rajoita, jos haluat asettaa muiden isäntien nginx-tason käyttämään tätä FPM-prosessia, sinun täytyy asettaa IP-osoite, johon pääsee käsiksi kuuntelun kustannuksella. Oletusarvo on mikä tahansa. Jokainen osoite on erotettu pilkulla. Jos sitä ei ole asetettu tai se on tyhjä, mikä tahansa palvelin saa pyytää yhteyttä

kuuntele.omistaja = www
listen.group = www
listen.mode = 0666
#unix socket-asetus, jos käytät TCP:tä päästäksesi sisään, voit kommentoida täällä.

käyttäjä = www
ryhmä = www
#启动进程的帐户和组

pm = dynaaminen #对于专用服务器, pm voidaan asettaa staattiseksi.
#如何控制子进程 vaihtoehdot ovat staattisia ja dynaamisia. Jos staattinen on valittu, kiinteä määrä lapsiprosesseja määritellään pm.max_children. Jos dynaaminen valitaan, se määräytyy seuraavien parametrien mukaan:
pm.max_children #, suurin määrä lapsiprosesseja
pm.start_servers #, prosessien määrä käynnistyksessä
pm.min_spare_servers #, takaa vähimmäismäärä lepoja prosesseja ja luo uusi lapsiprosessi, jos levoton prosessi on pienempi kuin tämä arvo
pm.max_spare_servers#, varmista maksimimäärä lepoja prosesseja, jos tyhjäkäyntiprosessi on suurempi kuin tämä arvo, se puhdistetaan

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. Tämä on erittäin hyödyllistä kolmannen osapuolen moduuleille, joissa saattaa olla muistivuotoja. Jos se on asetettu arvoon '0', pyyntö hyväksytään aina. Vastaavat PHP_FCGI_MAX_REQUESTS ympäristömuuttujia. Oletus: 0.

pm.status_path = /status
#FPM状态页面的网址. Jos sinulla ei ole asetuksia, et pääse tilasivulle. Oletus: ei lainkaan. Muninin seurantaa tullaan käyttämään

ping.path = /ping
#FPM监控页面的ping网址. Jos sinulla ei ole asetuksia, et pääse ping-sivulle. Tätä sivua käytetään ulkoisesti havaitsemaan, onko FPM elossa ja pystyykö se vastaamaan pyyntöihin. Huomaa, että sen täytyy alkaa viivalla (/).

ping.response = pong
#用于定义ping请求的返回相应. Palauttaa tekstin tekstimuodossa/pelkistettynä HTTP 200:ssa. Oletus: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Tämä vaihtoehto voi olla hyödyllinen skripteille, joita ei keskeytetä jostain erityisestä syystä php.ini asetuksissa 'max_execution_time'. Asetus '0' tarkoittaa 'pois päältä'. Voit kokeilla tämän asetuksen muuttamista, kun 502-virheitä esiintyy usein.

request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后 vastaavat PHP-kutsupinon tiedot kirjoitetaan hitaaseen lokiin. Asetus '0' tarkoittaa 'pois päältä'

slowlog = log/$pool.log.slow
#慢请求的记录日志, käytä request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Oletusarvo: Oletusavoin kahva on 1024, jota voi tarkastella ulimit -n ja muokata ulimit -n 2048:lla.

rlimit_core = 0
#设置核心rlimit最大限制值. Käytettävissä olevat arvot: 'rajoittamaton', 0 tai positiiviset kokonaisluvut. Oletusarvo: Järjestelmän määrittelemä arvo.

chroot =
#启动时的Chroot目录. Määritellyn hakemiston täytyy olla absoluuttinen polku. Jos asetusta ei ole, chrootia ei käytetä.

chdir =
#设置启动目录 Chdir ohjataan automaattisesti kyseiseen hakemistoon, kun se käynnistyy. Määritellyn hakemiston täytyy olla absoluuttinen polku. Oletus: nykyinen hakemisto, tai/hakemisto (kun chrootattu)

catch_workers_output = kyllä
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Jos ei ole asetettu, stdout ja stderr ohjataan /dev/null -kanavalle FastCGI:n sääntöjen mukaisesti. Oletus: Null.



PHP-FPM-parametrien säätö

pm = dynaaminen; Näyttää, mitä prosessimäärän hallintamenetelmää käytetään

Dynaaminen tarkoittaa, että PHP-FPM-prosessien määrä on dynaaminen, määrä määritellään pm.start_servers alussa, jos pyyntöjä on enemmän, se kasvaa automaattisesti varmistaen, että käyttämättömien prosessien määrä ei ole alle pm.min_spare_servers, ja jos prosessien määrä on suuri, se myös puhdistetaan sen mukaisesti, jotta ylimääräisten prosessien määrä ei ylitä pm.max_spare_servereita

Staattinen tarkoittaa, että PHP-FPM:n prosessien määrä on staattinen, ja prosessien määrä on aina pm.max_children määrittelemä, eikä se kasva tai vähene

pm.max_lapsia = 300; Staattisessa tilassa aktivoitujen php-fpm -prosessien määrä
pm.start_servers = 20; Dynaamisessa tilassa käynnistyvien php-fpm -prosessien määrä
pm.min_spare_servers = 5; Dynaamisessa tilassa olevien php-fpm -prosessien minimimäärä
pm.max_vara_palvelimet = 35; Dynaamisessa tilassa maksimimäärä php-fpm -prosesseja

Jos pm on staattinen, vain parametri pm.max_children on kelvollinen. Järjestelmä avaa tietyn määrän php-fpm -prosesseja

Jos PM on dynaaminen, pm.max_children -parametri on virheellinen, ja viimeiset kolme parametria astuvat voimaan. Järjestelmä käynnistää php-fpm pm.start_servers php-fpm -prosessin alussa ja säätää sitten dynaamisesti php-fpm -prosessien määrää pm.min_spare_servers ja pm.max_spare_serverien välillä järjestelmän tarpeiden mukaan

Joten, mikä PM-menetelmä on parempi valita palvelimellemme? Itse asiassa, kuten Apache, PHP-ohjelmien ajaminen aiheuttaa enemmän tai vähemmän muistivuoto-ongelmia suorituksen jälkeen. Siksi php-fpm -prosessi vie alussa vain noin 3M muistia, ja jonkin ajan käytön jälkeen se nousee 20-30M:iin.

Palvelimille, joilla on suuri muisti (kuten 8G tai enemmän), on itse asiassa sopivampaa määrittää staattinen max_children, koska se ei vaadi lisäprosessinhallintaa ja parantaa tehokkuutta. Koska php-fpm -prosessien toistuva vaihto viivettää myös, on parempi kytkeä staattiset efektit päälle, kun muisti on tarpeeksi suuri. Määrä voidaan myös saada muistin/30M:n mukaan, esimerkiksi 8GB muisti voidaan asettaa 100:aan, jolloin php-fpm:n kuluttamaa muistia voidaan ohjata 2G-3G:llä. Jos muisti on hieman pienempi, kuten 1G, staattisten prosessien määrän määrittäminen edistää palvelimen vakautta. Tämä varmistaa, että php-fpm saa vain tarpeeksi muistia ja varaa pienen määrän muistia muille sovelluksille, mikä tekee järjestelmästä sujuvamman toiminnan.

Palvelimella, jolla on pieni muisti, kuten VPS, jossa on 256M muistia, vaikka se laskettaisiin 20M muistimäärän mukaan, 10 php-cgi-prosessia kuluttaa 200M muistia, jolloin järjestelmän kaatuminen pitäisi olla normaali. Siksi sinun tulisi yrittää hallita php-fpm -prosessien määrää ja kun olet karkeasti selventänyt muiden sovellusten käyttämää muistia, määritellä sille staattinen pieni luku, joka tekee järjestelmästä vakaamman. Tai käytä dynaamista menetelmää, koska dynaaminen menetelmä lopettaa redundantin prosessin ja ottaa takaisin osan muistista, joten sitä suositellaan käyttämään palvelimilla tai VPS:llä, joilla on vähemmän muistia. Tarkka maksimimäärä saadaan muistin/20M:n perusteella. Esimerkiksi 512M VPS:lle suositellaan asettamaan pm.max_spare_servers arvoon 20. pm.min_spare_servers osalta suositellaan asettamaan se palvelimen kuormituksen mukaan, ja sopivampi arvo on välillä 5~10.

200 4G-muistilla varustetulla palvelimella on ihan ok (minun 1G-testikoneeni, 64 on paras, suositellaan stressitestiä parhaan vastineen saamiseksi)

pm.max_requests = 10240;

Suurin ongelma nginx php-fpm -konfigurointiprosessissa on sisäinen vuoto-ongelma: palvelimen kuormitus ei ole suuri, mutta muistin käyttö kasvaa nopeasti, kuluttaa muistia nopeasti ja alkaa syödä swap-osiota, ja järjestelmä jumittuu nopeasti! Itse asiassa virallisen johdannon mukaan php-cgi:llä ei ole muistivuotoa, ja php-cgi ottaa muistin takaisin jokaisen pyynnön jälkeen, mutta sitä ei vapauteta käyttöjärjestelmälle, mikä aiheuttaa suuren määrän muistia php-cgi:n käyttöön.


Virallinen ratkaisu on alentaa PHP_FCGI_MAX_REQUESTS:n arvoa, jos käytetään php-fpm:ää, vastaava php-fpm.conf on max_requests, mikä tarkoittaa, kuinka monta pyyntöä lähetetään säikeen uudelleenkäynnistämiseksi, meidän täytyy laskea tämä arvo asianmukaisesti, jotta php-fpm vapauttaa automaattisesti muistia, ei suurinta osaa Internetin 51200:sta jne., itse asiassa siihen liittyy toinen arvo max_ lapset, näin monta prosessia perustetaan joka kerta php-fpm, jolloin todellinen muistinkulutus on max_children*max_requests* Jokainen pyyntö käyttää muistia, tämän mukaan voimme arvioida muistinkäytön, joten skriptejä ei tarvitse kirjoittaa tappamiseksi.

request_terminate_timeout = 30;

Maksimisuoritusaika, konfiguroitavissa php.ini (max_execution_time)

request_slowlog_timeout = 2; Laita hitaat lokit päälle
slowlog = log/$pool.log.slow; Hidas lokireitti

rlimit_files = 1024; Lisätty php-fpm:n rajoitus avoimiin tiedostokuvauksiin





Edellinen:Alibaba Cloud SLB:n kuormantasaus, HTTP-terveystarkistuksen virheanalyysi
Seuraava:DZ X3.4 Tiedoston tarkistus puuttuvat tiedostot
 Vuokraisäntä| Julkaistu 28.11.2021 13.42.00 |
[Harjoitus] Tarkista php-fpm -tilatiedot Nginxin kautta
https://www.itsvse.com/thread-10180-1-1.html
 Vuokraisäntä| Julkaistu 19.12.2021 10.48.43 |
 Vuokraisäntä| Julkaistu 16.1.2022 15.26.55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_spare_servers – maksimimäärä lapsia 'idle'-tilassa
; Oletusarvo: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_vara_palvelimet = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers – minimimäärä lapsia 'joutilaisuudessa'
; Oletusarvo: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 5
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep start_servers
;             pm.start_servers – startupissa syntyneiden lasten määrä.
pm.start_servers = 20
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_requests
pm.max_requests = 10240
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep request_slowlog_timeout
; Huomautus: slowlog on pakollinen, jos request_slowlog_timeout on asetettu
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP Slowlog
; - 'slowlog'
; Huomautus: slowlog on pakollinen, jos request_slowlog_timeout on asetettu
slowlog = /alidata/log/php/$pool.log.slow
; dumpattuna 'slowlog'-tiedostoon. Arvo '0s' tarkoittaa 'pois päältä'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Aseta avoimen tiedoston kuvaus rlimit pääprosessille.
; rlimit_files = 1024
; Aseta maksimiydinkoon rlimit pääprosessille.
; rlimit_core = 0
; Aseta avoimen tiedoston kuvaus rlimit.
; rlimit_files = 1024
; Aseta maksimiydinkoko rlimit.
; rlimit_core = 0
[root@old_server puhelu] #
 Vuokraisäntä| Julkaistu 16.1.2022 16.54.04 |
request_terminate_timeout = 10s

Oletusarvo on 0 sekuntia, mikä tarkoittaa, että PHP-skripti jatkaa suoritustaan. Näin ollen, kun kaikki php-cgi-prosessit ovat varattuja, Nginx+PHP WebServer ei enää pysty käsittelemään uusia PHP-pyyntöjä, ja Nginx palauttaa käyttäjälle "502 Bad Gateway". request_terminate_timeout = 30-luvut voidaan käyttää
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com