Parametrii importanți php-fpm.conf sunt explicați în detaliu
PID = run/php-fpm.pid #pid设置, se recomandă activarea implicită a var/run/php-fpm.pid în directorul de instalare
error_log = log/php-fpm.log #错误日志, implicit este var/log/php-fpm.log în directorul de instalare
log_level = notificare #错误级别. Nivelurile disponibile sunt: alertă, eroare, avertizare, notificare, depanare. Implicit: notificare.
emergency_restart_threshold = 60 emergency_restart_interval = 60s # indică faptul că dacă numărul de procese php-CGI cu erori SIGSEGV sau SIGBUS depășește emergency_restart_threshold în valoarea emergency_restart_interval, php-fpm va fi repornit grațios. Aceste două opțiuni rămân, în general, implicite.
process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. Unități disponibile: s (secunde), m (minute), h (ore) sau d (zile) Unități implicite: s (secunde). Implicit: 0.
daemonize = da #后台执行fpm, valoarea implicită este da, iar dacă vrei să depanezi, poți schimba în nu. În FPM, diferite setări pot fi folosite pentru a rula mai multe pool-uri de procese. Aceste setări pot fi setate individual pentru fiecare pool de procese.
ascultă = 127.0.0.1:9000 #fpm监听端口, adică adresa procesată de PHP în nginx, este în general valoarea implicită. Formatele disponibile sunt: 'ip:port', 'port', '/path/to/unix/socket'. Fiecare pool de procese trebuie configurat.
listen.backlog = -1 #backlog数, -1 înseamnă nelimitat, determinat de sistemul de operare, doar comentează această linie. Referință: http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP, setează orice să nu restricționeze IP-ul, dacă vrei să setezi nginx-ul altor gazde să acceseze acest proces FPM, trebuie să setezi adresa IP accesibilă cu prețul ascultării. Valoarea implicită este oricare. Fiecare adresă este separată de o virgulă. Dacă nu este setat sau este gol, orice server are voie să solicite o conexiune
ascultă.proprietar = www listen.group = www listen.mode = 0666 #unix opțiunea de setare socket, dacă folosești TCP pentru acces, poți comenta aici.
utilizator = www Grupă = www #启动进程的帐户和组
PM = #对于专用服务器 dinamic, PM poate fi setat pe static. #如何控制子进程, opțiunile sunt statice și dinamice. Dacă staticul este selectat, un număr fix de procese copii este specificat de pm.max_copii. Dacă dinamica este selectată, aceasta este determinată de următorii parametri: pm.max_copii #, numărul maxim de procese copii pm.start_servers #, numărul de procese la pornire pm.min_spare_servers #, garantează un număr minim de procese inactive și creează un nou proces copil dacă procesul inactiv este mai mic decât această valoare pm.max_spare_servers#, asigură numărul maxim de procese inactive, dacă procesul inactiv este mai mare decât această valoare, aceasta va fi curățată
pm.max_cereri = 1000 #设置每个子进程重生之前服务的请求数. Acest lucru este foarte util pentru modulele terțe părți care pot avea scurgeri de memorie. Dacă este setată la '0', cererea este întotdeauna acceptată. Echivalent cu PHP_FCGI_MAX_REQUESTS variabile de mediu. Implicit: 0.
pm.status_path = /status #FPM状态页面的网址. Dacă nu ai setările, nu poți accesa pagina de stare. Implicit: niciunul. Se va folosi monitorizarea munin
ping.path = /ping #FPM监控页面的ping网址. Dacă nu ai setările, nu poți accesa pagina de ping. Această pagină este folosită pentru a detecta extern dacă FPM-ul este activ și poate răspunde la cereri. Rețineți că trebuie să înceapă cu o bară oblică (/).
ping.response = pong #用于定义ping请求的返回相应. Returnează text în format text/simplu pentru HTTP 200. Implicit: pong.
request_terminate_timeout = 0 #设置单个请求的超时中止时间. Această opțiune poate fi utilă pentru scripturile care nu sunt anulate dintr-un motiv special php.ini "max_execution_time" în setări. Setat la '0' înseamnă 'Off'. Poți încerca să schimbi această opțiune când erorile 502 apar frecvent.
request_slowlog_timeout = 10s #当一个请求该设置的超时时间后, informațiile corespunzătoare ale stivei de apeluri PHP vor fi scrise în jurnalul lent. Setat la '0' înseamnă 'Oprit'
slowlog = log/$pool.log.slow #慢请求的记录日志, folosește cu request_slowlog_timeout
rlimit_files = 1024 #设置文件打开描述符的rlimit限制. Valoare implicită: Handle-ul deschis implicit este 1024, care poate fi vizualizat cu ulimit -n și modificat cu ulimit -n 2048.
rlimit_core = 0 #设置核心rlimit最大限制值. Valori disponibile: "nelimitat", 0 sau întregi pozitive. Valoare implicită: Valoare definită de sistem.
chroot = #启动时的Chroot目录. Directorul definit trebuie să fie o cale absolută. Dacă nu există o setare, chroot-ul nu este folosit.
chdir = #设置启动目录, Chdir este trimis automat către acel director când pornește. Directorul definit trebuie să fie o cale absolută. Implicit: director curent sau/director (când este chrootat)
catch_workers_output = da #重定向运行过程中的stdout和stderr到主要的错误日志文件中. Dacă nu este setată, stdout și stderr vor fi redirecționate către /dev/null conform regulilor FastCGI. Implicit: Null.
Ajustarea parametrilor PHP-FPM
PM = dinamic; Indică ce metodă de gestionare a cantității de proces este folosită
Dinamic înseamnă că numărul de procese PHP-FPM este dinamic, numărul este pm.start_servers specificat la început, dacă apar mai multe cereri, va crește automat pentru a se asigura că numărul proceselor inactive nu este mai mic de pm.min_spare_servers, iar dacă numărul de procese este mare, va fi de asemenea curățat corespunzător pentru a se asigura că numărul de procese în exces nu depășește pm.max_servere_spare
static înseamnă că numărul de procese din php-fpm este static, iar numărul proceselor este întotdeauna numărul specificat de pm.max_children și nu crește și nu scade
pm.max_copii = 300; Numărul de procese php-fpm care sunt activate în modul static pm.start_servers = 20; Numărul proceselor php-fpm de pornire în modul dinamic pm.min_spare_servers = 5; Numărul minim de procese php-fpm în modul dinamic pm.max_servere_de rezervă = 35; Numărul maxim de procese php-fpm în modul dinamic
Dacă pm este static, atunci doar parametrul pm.max_children este valabil. Sistemul va deschide un număr fix de procese php-fpm
Dacă PM-ul este dinamic, atunci parametrul pm.max_children este invalid, iar ultimii trei parametri intră în vigoare. Sistemul va porni pm.start_servers procese php-fpm la începutul rulării php-pm, apoi va ajusta dinamic numărul de procese php-fpm între pm.min_spare_servers și pm.max_spare_servere, în funcție de nevoile sistemului
Deci, care metodă de PM este mai potrivită pentru serverul nostru? De fapt, la fel ca Apache, rularea programelor PHP va avea mai mult sau mai puțin probleme de scurgere de memorie după execuție. De aceea un proces php-fpm ocupă doar aproximativ 3M memorie la început, iar după ce rulează o perioadă, va ajunge la 20-30M.
Pentru serverele cu memorie mare (cum ar fi 8G sau mai mult), este de fapt mai potrivit să se specifice max_children statice, deoarece acest lucru nu necesită control suplimentar al procesului și îmbunătățește eficiența. Deoarece comutarea frecventă a proceselor php-fpm va întârzia timpul, va fi mai bine să activezi efectele statice când memoria este suficient de mare. Cantitatea poate fi obținută și în funcție de memorie/30M, de exemplu, 8GB de memorie poate fi setată la 100, iar memoria consumată de php-fpm poate fi controlată în 2G-3G. Dacă memoria este puțin mai mică, cum ar fi 1G, atunci specificarea numărului de procese statice este mai favorabilă stabilității serverului. Acest lucru asigură că php-fpm primește doar suficientă memorie și alocă o cantitate mică de memorie altor aplicații, ceea ce va face ca sistemul să funcționeze mai fluid.
Pentru un server cu memorie mică, cum ar fi un VPS cu 256M memorie, chiar dacă este calculat după o cantitate de memorie de 20M, 10 procese php-CGI vor consuma 200M memorie, atunci blocarea sistemului ar trebui să fie normală. Prin urmare, ar trebui să încerci să controlezi numărul de procese php-fpm și, după ce clarifici aproximativ memoria ocupată de alte aplicații, să specifici un număr static mic, ceea ce va face sistemul mai stabil. Sau folosește metoda dinamică, deoarece metoda dinamică va încheia procesul redundant și va recupera o parte din memorie, așa că este recomandat să o folosești pe servere sau VPS cu mai puțină memorie. Cantitatea maximă specifică se obține pe baza memoriei/20M. De exemplu, pentru un VPS 512M, se recomandă setarea pm.max_spare_servers la 20. În ceea ce privește pm.min_spare_servers, se recomandă să fie setat în funcție de încărcarea serverului, iar valoarea mai potrivită este între 5~10.
200 pe un server cu memorie 4G este ok (calculatorul meu de test 1G, 64 este cel mai bun, este recomandat să folosești test de stres pentru a obține cel mai bun raport calitate-preț).
pm.max_solicitări = 10240;
Cea mai mare problemă în procesul de configurare nginx php-fpm este problema scurgerii interne: sarcina pe server nu este mare, dar ocuparea memoriei crește rapid, consumând rapid memoria și apoi începând să consume partiția swap, iar sistemul se blochează rapid! De fapt, conform introducerii oficiale, php-cgi nu are scurgeri de memorie, iar php-cgi va recupera memoria după fiecare cerere finalizată, dar nu va fi eliberat pe sistemul de operare, ceea ce va determina ocuparea unei cantități mari de memorie de php-cgi.
Soluția oficială este să scadă valoarea PHP_FCGI_MAX_REQUESTS, dacă se folosește php-fpm, php-fpm.conf corespunzător este max_requests, ceea ce înseamnă că câte cereri vor fi trimise pentru a reporni firul, trebuie să reducem această valoare corespunzător, astfel încât php-fpm să elibereze automat memoria, nu majoritatea celor 51200 de pe Internet etc., de fapt, există o altă valoare legată de max_ copii, acesta este câte procese vor fi stabilite de fiecare dată php-fpm, astfel încât consumul real de memorie să fie max_children*max_requests* Fiecare cerere folosește memorie, conform acestui lucru putem estima consumul memoriei, deci nu este nevoie să scriem scripturi pentru a le opri.
request_terminate_timeout = 30;
Timp maxim de execuție, configurabil în php.ini (max_execution_time)
request_slowlog_timeout = 2; Pornește bușteanele lente slowlog = log/$pool.log.slow; Traseul lent al logaritmului
rlimit_files = 1024; S-a adăugat o limită pentru php-fpm la descriptorii de fișiere deschise
|