php-fpm.conf Išsamiai paaiškinti svarbūs parametrai
pid = paleisti / php-fpm.pid #pid设置, pagal numatytuosius nustatymus diegimo kataloge rekomenduojama įjungti var/run/php-fpm.pid
error_log = log/php-fpm.log #错误日志, numatytasis yra var/log/php-fpm.log diegimo kataloge
log_level = pranešimas #错误级别. Galimi lygiai: įspėjimas, klaida, įspėjimas, pranešimas, derinimas. Numatytasis: pranešimas.
emergency_restart_threshold = 60 emergency_restart_interval = 60s # rodo, kad jei php-cgi procesų skaičius su SIGSEGV arba SIGBUS klaidomis viršija emergency_restart_threshold emergency_restart_interval reikšmėje, php-fpm bus grakščiai paleistas iš naujo. Šios dvi parinktys paprastai išlieka numatytosios.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Galimi vienetai: s (sekundės), m (minutės), h (valandos) arba d (dienos) Numatytieji vienetai: s (sekundės). Numatytasis: 0.
daemonize = taip #后台执行fpm numatytoji reikšmė yra taip, o jei norite derinti, galite ją pakeisti į ne. FPM galima naudoti skirtingus nustatymus keliems procesų telkiniams paleisti. Šiuos parametrus galima nustatyti atskirai kiekvienam procesų telkiniui.
klausytis = 127.0.0.1:9000 #fpm监听端口, tai yra, adresas, kurį PHP apdoroja nginx, paprastai yra numatytoji reikšmė. Galimi formatai: 'ip:port', 'port', '/path/to/unix/socket'. Kiekvienas procesų telkinys turi būti nustatytas.
listen.backlog = -1 #backlog数, -1 reiškia neribotą, nustatytą operacinės sistemos, tiesiog pakomentuokite šią eilutę. Kodas: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP nustatykite, kad neapribotų IP, jei norite nustatyti kitų kompiuterių nginx, kad pasiektumėte šį FPM procesą, turite nustatyti IP adresą, kurį galima pasiekti klausymosi kaina. Numatytoji reikšmė yra bet kokia. Kiekvienas adresas atskirtas kableliu. Jei jis nenustatytas arba tuščias, bet kuriam serveriui leidžiama prašyti ryšio
listen.owner = www listen.group = www klausytis.režimas = 0666 #unix lizdo nustatymo parinktį, jei naudojate TCP, galite komentuoti čia.
vartotojas = www grupė = www #启动进程的帐户和组
pm = dinaminis #对于专用服务器, pm galima nustatyti statinį. #如何控制子进程 parinktys yra statiškos ir dinamiškos. Jei pasirinktas statinis, pm.max_children nurodomas fiksuotas antrinių procesų skaičius. Jei pasirenkamas dinaminis, jis nustatomas pagal šiuos parametrus: pm.max_children #, maksimalus antrinių procesų skaičius pm.start_servers #, procesų skaičius paleidžiant pm.min_spare_servers #, garantuokite minimalų laukimo procesų skaičių ir sukurkite naują antrinį procesą, jei laukimo procesas yra mažesnis už šią reikšmę pm.max_spare_servers#, užtikrinkite maksimalų laukimo procesų skaičių, jei laukimo procesas yra didesnis už šią reikšmę, jis bus išvalytas
pm.max_užklausos = 1000 #设置每个子进程重生之前服务的请求数. Tai labai naudinga trečiųjų šalių moduliams, kuriuose gali būti atminties nutekėjimo. Jei nustatyta "0", užklausa visada priimama. Atitinka PHP_FCGI_MAX_REQUESTS aplinkos kintamuosius. Numatytasis: 0.
pm.status_path = /status #FPM状态页面的网址. Jei neturite nustatymų, negalite pasiekti būsenos puslapio. Numatytasis: nėra. Bus naudojamas Munin stebėjimas
ping.path = /ping #FPM监控页面的ping网址. Jei neturite nustatymų, negalite pasiekti ping puslapio. Šis puslapis naudojamas išoriškai nustatyti, ar FPM yra gyvas ir gali atsakyti į užklausas. Atkreipkite dėmesį, kad jis turi prasidėti pasviruoju brūkšniu (/).
ping.response = tenisas #用于定义ping请求的返回相应. Pateikia tekstą teksto / paprastuoju formatu, skirtu HTTP 200. Numatytasis: tenisas.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Ši parinktis gali būti naudinga scenarijams, kurie nėra nutraukti dėl kokios nors ypatingos priežasties php.ini nustatymuose "max_execution_time". Nustatyta į "0" reiškia "Išjungta". Galite pabandyti pakeisti šią parinktį, kai dažnai susiduriama su 502 klaidomis.
request_slowlog_timeout = 10 s #当一个请求该设置的超时时间后, atitinkama PHP skambučių rietuvės informacija bus įrašyta į lėtą žurnalą. Nustatyta į "0" reiškia "Išjungta"
slowlog = log/$pool.log.slow #慢请求的记录日志, naudokite su request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Numatytoji reikšmė: numatytoji atidarymo rankenėlė yra 1024, kurią galima peržiūrėti naudojant ulimit -n ir modifikuoti ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Galimos reikšmės: "neribotas", 0 arba teigiami sveikieji skaičiai. Numatytoji reikšmė: sistemos apibrėžta reikšmė.
chroot = #启动时的Chroot目录. Apibrėžtas katalogas turi būti absoliutus kelias. Jei nustatymo nėra, chroot nenaudojamas.
chdir = #设置启动目录, Chdir automatiškai siunčiamas į tą katalogą, kai jis paleidžiamas. Apibrėžtas katalogas turi būti absoliutus kelias. Numatytasis: dabartinis katalogas, arba/katalogas (kai chrooted)
catch_workers_output = taip #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Jei nenustatyta, stdout ir stderr bus nukreipti į /dev/null pagal FastCGI taisykles. Numatytasis: nulinis.
PHP-FPM parametrų derinimas
pm = dinaminis; Nurodo, kuris proceso kiekio valdymo metodas naudojamas
Dinaminis reiškia, kad PHP-FPM procesų skaičius yra dinamiškas, skaičius pm.start_servers nurodytas pradžioje, jei yra daugiau užklausų, jis automatiškai padidės, kad nenaudojamų procesų skaičius būtų ne mažesnis nei pm.min_spare_servers, o jei procesų skaičius yra didelis, jis taip pat bus atitinkamai išvalytas, siekiant užtikrinti, kad perteklinių procesų skaičius būtų ne didesnis kaip pm.max_spare_servers
statinis reiškia, kad procesų skaičius php-fpm yra statinis, o procesų skaičius visada yra pm.max_children nurodytas skaičius, ir nedidėja ar mažėja
pm.max_vaikai = 300; PHP-FPM procesų, kurie įjungti statiniu režimu, skaičius pm.start_servers = 20; Pradedančių php-fpm procesų skaičius dinaminiu režimu pm.min_spare_servers = 5; Mažiausias php-fpm procesų skaičius dinaminiu režimu pm.max_atsarginiai_serveriai = 35; Maksimalus php-fpm procesų skaičius dinaminiu režimu
Jei pm yra statinis, galioja tik parametras pm.max_children. Sistema atidarys nustatytą skaičių php-fpm procesų
Jei PM yra dinaminis, parametras pm.max_children yra neleistinas ir įsigalioja paskutiniai trys parametrai. Sistema pradės pm.start_servers php-fpm procesus php-fpm paleidimo pradžioje, o tada dinamiškai koreguos php-fpm procesų skaičių tarp pm.min_spare_servers ir pm.max_spare_servers pagal sistemos poreikius
Taigi, kurį PM metodą geriau pasirinkti mūsų serveriui? Tiesą sakant, kaip ir "Apache", paleidus PHP programas po vykdymo daugiau ar mažiau kils atminties nutekėjimo problemų. Štai kodėl php-fpm procesas pradžioje užima tik apie 3M atminties, o kurį laiką paleidus jis pakils iki 20-30M.
Serveriams, turintiems didelę atmintį (pvz., 8G ar daugiau), iš tikrųjų tikslingiau nurodyti statinį max_children, nes tam nereikia papildomo proceso valdymo ir padidėja efektyvumas. Kadangi dažnas php-fpm procesų perjungimas taip pat vėluos laiką, geriau bus įjungti statinius efektus, kai atmintis yra pakankamai didelė. Kiekį taip pat galima gauti pagal atmintį/30M, pavyzdžiui, 8GB atmintį galima nustatyti į 100, tada php-fpm sunaudojamą atmintį galima valdyti 2G-3G. Jei atmintis yra šiek tiek mažesnė, pvz., 1G, tada statinių procesų skaičiaus nurodymas yra palankesnis serverio stabilumui. Tai užtikrina, kad php-fpm gauna tik pakankamai atminties, ir skiria nedidelį kiekį atminties kitoms programoms, todėl sistema veikia sklandžiau.
Serveriui su maža atmintimi, pavyzdžiui, VPS su 256M atmintimi, net jei jis apskaičiuojamas pagal 20M atminties kiekį, 10 php-cgi procesų sunaudos 200M atminties, tada sistemos gedimas turėtų būti normalus. Todėl turėtumėte pabandyti kontroliuoti php-fpm procesų skaičių ir, apytiksliai išsiaiškinę kitų programų užimamą atmintį, nurodykite statinį mažą skaičių, kuris padarys sistemą stabilesnę. Arba naudokite dinaminį metodą, nes dinaminis metodas užbaigs perteklinį procesą ir atgaus dalį atminties, todėl rekomenduojama jį naudoti serveriuose arba VPS su mažiau atminties. Konkretus maksimalus kiekis gaunamas pagal atmintį / 20M. Pavyzdžiui, 512M VPS rekomenduojama nustatyti pm.max_spare_servers į 20. Kalbant apie pm.min_spare_servers, rekomenduojama jį nustatyti pagal serverio apkrovą, o tinkamesnė vertė yra tarp 5~10.
200 serveryje su 4G atmintimi yra gerai (mano 1G testavimo mašina, 64 yra geriausia, norint gauti geriausią vertę, rekomenduojama naudoti testavimą nepalankiausiomis sąlygomis)
pm.max_užklausos = 10240;
Didžiausia problema nginx php-fpm konfigūracijos procese yra vidinė nuotėkio problema: serverio apkrova nėra didelė, tačiau atminties užimtumas greitai didėja, greitai suvalgo atmintį ir tada pradeda valgyti apsikeitimo skaidinį, o sistema greitai užstringa! Tiesą sakant, pagal oficialų įvadą, php-cgi neturi atminties nutekėjimo, o php-cgi atgaus atmintį po kiekvienos užklausos įvykdymo, tačiau nebus išleistas į operacinę sistemą, todėl php-cgi užims daug atminties.
Oficialus sprendimas yra sumažinti PHP_FCGI_MAX_REQUESTS vertę, jei naudojamas php-fpm, atitinkamas php-fpm.conf yra max_requests, o tai reiškia, kiek užklausų bus išsiųsta iš naujo paleisti giją, turime atitinkamai sumažinti šią vertę, kad php-fpm automatiškai atlaisvintų atmintį, o ne dauguma 51200 internete ir pan., Tiesą sakant, yra kita su ja susijusi vertė max_ vaikai, štai kiek procesų bus nustatyta kiekvieną kartą php-fpm, kad faktinis atminties suvartojimas būtų max_children*max_requests* Kiekviena užklausa naudoja atmintį, pagal tai galime įvertinti atminties naudojimą, todėl nereikia rašyti scenarijų, kad nužudytumėte.
request_terminate_timeout = 30;
Maksimalus vykdymo laikas, konfigūruojamas php.ini (max_execution_time)
request_slowlog_timeout = 2; Lėtų žurnalų įjungimas slowlog = log/$pool.log.slow; Lėtas žurnalo kelias
rlimit_files = 1024; Pridėtas php-fpm apribojimas atidaryti failų deskriptorius
|