php-fpm.conf olulised parameetrid on üksikasjalikult selgitatud
pid = run/php-fpm.pid #pid设置 soovitatakse vaikimisi lubada var/run/php-fpm.pid paigalduskaustas
error_log = logi/php-fpm.log #错误日志 vaikimisi on paigalduskaustas var/log/php-fpm.log
log_level = teade #错误级别. Saadaval olevad tasemed on: hoiatus, viga, hoiatus, teavitus, silumine. Vaikimisi: teade.
emergency_restart_threshold = 60 emergency_restart_interval = 60ndad # näitab, et kui SIGSEGV või SIGBUS vigadega seotud php-cgi protsesside arv ületab emergency_restart_threshold emergency_restart_interval väärtuses, taaskäivitatakse php-fpm sujuvalt. Need kaks võimalust jäävad üldiselt vaikimisi lahenduseks.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Saadaolevad ühikud: s (sekundid), m (minutid), h (tunnid) või d (päevad) Vaikimisi ühikud: s (sekundid). Vaikimisi: 0.
daemonize = jah #后台执行fpm vaikimisi väärtus on jah, ja kui soovid siluda, saad selle muuta ei-ks. FPM-is saab erinevaid seadeid kasutada mitme protsessibasseini käivitamiseks. Need seaded saab iga protsessigrupi jaoks eraldi seadistada.
kuula = 127.0.0.1:9000 #fpm监听端口 ehk aadress, mida PHP töötleb nginx-is, on üldiselt vaikimisi väärtus. Saadaval olevad vormingud on: 'ip:port', 'port', '/path/to/unix/socket'. Iga protsessigrupp tuleb üles seada.
kuula.backlog = -1 #backlog数, -1 tähendab piiramatult, operatsioonisüsteemi poolt määratud, lihtsalt kommenteeri seda rida. Viide: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP määra ükskõik milline nii, et IP-d ei piira, kui tahad määrata teiste hostide nginx-i selle FPM-protsessi kasutamiseks, pead määrama IP-aadressi, millele pääseb ligi kuulamise arvelt. Vaikimisi väärtus on ükskõik milline. Iga aadress on eraldatud komaga. Kui see pole seadistatud või on tühi, võib iga server ühendust taotleda
kuula.omanik = www kuula.grupp = www kuula.mode = 0666 #unix pistikupesa seadistus, kui kasutad TCP-d ligipääsu jaoks, saad siin kommentaari jätta.
kasutaja = www grupp = www #启动进程的帐户和组
pm = dünaamiline #对于专用服务器, PM saab seada staatiliseks. #如何控制子进程 valikud on staatilised ja dünaamilised. Kui staatiline on valitud, määrab pm.max_children fikseeritud arvu alamprotsesse. Kui dünaamika valitakse, määravad selle järgmised parameetrid: pm.max_lapsed #, maksimaalne lapsprotsesside arv pm.start_servers #, protsesside arv käivitamisel pm.min_spare_servers #, garanteeri minimaalne arv tühikäiguprotsesse ja loo uus lapsprotsess, kui tühikäiguprotsess on sellest väärtusest väiksem pm.max_spare_servers#, veendu, et maksimaalne tühikäiguprotsesside arv, kui tühikäigu protsess on sellest suurem, puhastatakse see
pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. See on väga kasulik kolmandate osapoolte moodulite puhul, millel võib olla mälulekkeid. Kui see on seatud väärtusele '0', võetakse taotlus alati vastu. Ekvivalentne PHP_FCGI_MAX_REQUESTS keskkonnamuutujatele. Vaikimisi: 0.
pm.status_path = /staatus #FPM状态页面的网址. Kui sul pole seadeid, ei pääse sa olekulehele ligi. Vaikimisi: puudub. Kasutatakse muniini jälgimist
ping.path = /ping #FPM监控页面的ping网址. Kui sul pole seadeid, ei pääse sa pingi lehele ligi. Seda lehte kasutatakse selleks, et väliselt tuvastada, kas FPM on elus ja suudab päringutele vastata. Pane tähele, et see peab algama kaldkriipsuga (/).
ping.response = pong #用于定义ping请求的返回相应. HTTP 200 jaoks tagastab teksti/lihtsa vormingu teksti. Vaikimisi: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. See valik võib olla kasulik skriptide puhul, mida mingil erilisel põhjusel php.ini 'max_execution_time' seadetes ei katkestata. Seade '0' tähendab 'Väljas'. Võid proovida seda valikut muuta, kui 502 vigu esineb sageli.
request_slowlog_timeout = kümned #当一个请求该设置的超时时间后 kirjutatakse vastav PHP kõne virna info aeglasesse logi. Seatud '0' tähendab 'väljas'
slowlog = log/$pool.log.slow #慢请求的记录日志, kasuta request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Vaikimisi väärtus: vaikimisi avatud käepide on 1024, mida saab vaadata ulimit -n ja mida saab muuta ulimit -n 2048-ga.
rlimit_core = 0 #设置核心rlimit最大限制值. Saadaval olevad väärtused: 'piiramatu', 0 või positiivsed täisarvud. Vaikimisi väärtus: Süsteemi määratletud väärtus.
chroot = #启动时的Chroot目录. Määratletud kataloog peab olema absoluutne tee. Kui seadet pole, siis chrooti ei kasutata.
chdir = #设置启动目录 saadetakse Chdir automaatselt sellesse kausta, kui see käivitub. Määratletud kataloog peab olema absoluutne tee. Vaikimisi: praegune kataloog või/kataloog (kui on chrootitud)
catch_workers_output = jah #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Kui pole seadistatud, suunatakse stdout ja stderr vastavalt FastCGI reeglitele /dev/null lehele. Vaikimisi: null.
PHP-FPM parameetrite häälestus
pm = dünaamiline; Näitab, millist protsessi koguse juhtimise meetodit kasutatakse
Dünaamiline tähendab, et PHP-FPM protsesside arv on dünaamiline, see arv on alguses pm.start_servers määratud, kui päringuid on rohkem, suureneb see automaatselt, et tagada tühikäigul olevate protsesside arv mitte vähem kui pm.min_spare_servers, ning kui protsesside arv on suur, siis puhastatakse see vastavalt, et üleliigsete protsesside arv ei ületaks pm.max_spare_servereid
Staatiline tähendab, et PHP-FPM-is on protsesside arv staatiline ning protsesside arv on alati sama palju, mille määrab pm.max_children, ega suurene ega vähene
pm.max_last = 300; Staatilises režiimis lubatud php-fpm protsesside arv pm.start_servers = 20; Dünaamilises režiimis käivitatavate php-fpm protsesside arv pm.min_spare_servers = 5; Dünaamilises režiimis minimaalne arv php-fpm protsesse pm.max_varu_serverid = 35; Maksimaalne php-fpm protsesside arv dünaamilises režiimis
Kui pm on staatiline, siis kehtib ainult parameeter pm.max_children. Süsteem avab kindla arvu php-fpm protsesse
Kui PM on dünaamiline, siis on pm.max_children parameeter kehtetu ja viimased kolm parameetrit jõustuvad. Süsteem käivitab php-fpm protsesside pm.start_servers php-fpm käivitamise alguses ning seejärel kohandab dünaamiliselt php-fpm protsesside arvu pm.min_spare_servers ja pm.max_spare_serverite vahel vastavalt süsteemi vajadustele
Niisiis, milline PM-meetod on meie serveri jaoks parem valik? Tegelikult, nagu Apache'il, esineb PHP programmide käivitamisel pärast käivitamist enam-vähem mälulekkeprobleeme. Seetõttu võtab php-fpm protsess alguses vaid umbes 3M mälu ja pärast mõnda aega töötamist tõuseb see 20-30M-ni.
Serverite puhul, millel on suur mälu (näiteks 8G või rohkem), on tegelikult sobivam määrata staatiline max_children, kuna see ei nõua täiendavat protsessikontrolli ja parandab efektiivsust. Kuna sagedased php-fpm protsesside vahetused viivitavad samuti aega, on parem lülitada staatilised efektid sisse, kui mälu on piisavalt suur. Kogust saab saada ka mälu/30M järgi, näiteks saab 8GB mälu seada 100-le, seejärel saab php-fpm tarbitud mälu kontrollida 2G-3G süsteemis. Kui mälu on veidi väiksem, näiteks 1G, siis staatiliste protsesside arvu määramine aitab serveri stabiilsust paremini parandada. See tagab, et php-fpm saab ainult piisavalt mälu ning eraldab väikese hulga mälu teistele rakendustele, mis muudab süsteemi sujuvamaks.
Serveri puhul, millel on väike mälu, näiteks VPS, millel on 256M mälu, siis isegi kui see arvutatakse 20M mälukoguse järgi, kulutab 10 php-cgi protsessi 200M mälu, siis peaks süsteemi krahh olema normaalne. Seetõttu peaksid proovima kontrollida php-fpm protsesside arvu ning pärast teiste rakenduste mälu umbkaudset täpsustamist määrata sellele staatiline väike number, mis muudab süsteemi stabiilsemaks. Või kasutada dünaamilist meetodit, sest see lõpetab liigse protsessi ja võtab osa mälust tagasi, seega soovitatakse seda kasutada serverites või VPS-is, kus on vähem mälu. Konkreetne maksimaalne kogus saadakse mälu/20M põhjal. Näiteks 512M VPS-i puhul soovitatakse määrata pm.max_spare_serverid 20-le. pm.min_spare_servers puhul soovitatakse määrata see serveri koormuse järgi ning sobivam väärtus jääb vahemikku 5~10.
200 serveris, kus on 4G mälu, on täiesti okei (minu 1G testimasin, 64 on parim, soovitatav on kasutada stressitesti, et saada parim väärtus).
pm.max_requests = 10240;
Suurim probleem nginx php-fpm seadistamise protsessis on sisemine lekkeprobleem: serveri koormus ei ole suur, kuid mälu hõivamine kasvab kiiresti, neelab mälu kiiresti ja hakkab siis swap-partitsiooni sööma, ning süsteem katkeb kiiresti! Tegelikult, vastavalt ametlikule sissejuhatusele, ei ole php-cgi-l mälulekkeid ning php-cgi võtab pärast iga päringu täitmist mälu tagasi, kuid seda operatsioonisüsteemile ei vabastata, mis põhjustab suure mälu hõivamise php-cgi poolt.
Ametlik lahendus on vähendada PHP_FCGI_MAX_REQUESTS väärtust, kui kasutatakse php-fpm väärtust, siis vastav php-fpm.conf on max_requests, mis tähendab, kui palju päringuid saadetakse lõime taaskäivitamiseks, peame selle väärtuse vastavalt vähendama, et php-fpm vabastaks automaatselt mälu, mitte enamik 51200 internetis jne, tegelikult on sellega seotud veel üks väärtus max_ lapsed, see näitab, kui palju protsesse luuakse iga kord php-fpm korral, nii et tegelik mälukasutus on max_children*max_requests* Iga päring kasutab mälu, selle järgi saame hinnata mälukasutust, nii et skripte ei ole vaja kirjutada tapmiseks.
request_terminate_timeout = 30;
Maksimaalne täitmisaeg, seadistatav php.ini (max_execution_time)
request_slowlog_timeout = 2; Lülita sisse aeglased logid slowlog = log/$pool.log.slow; Aeglane logirada
rlimit_files = 1024; Lisatud piirang php-fpm avamiseks failikirjelduste avamiseks
|