Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 11358|Válasz: 4

PHP-FPM paraméterkonfiguráció és hangolás

[Linket másol]
Közzétéve 2017. 07. 26. 9:20:54 | | |
A php-fpm.conf fontos paraméterek részletesen ismertethetők

pid = run/php-fpm.pid
#pid设置 ajánlott, hogy alapértelmezés szerint engedélyezze a var/run/php-fpm.pid fájlokat az installációs könyvtárban

error_log = napló/php-fpm.log
#错误日志 az alapértelmezett var/log/php-fpm.log az installációs könyvtárban

log_level = értesítés
#错误级别. Az elérhető szintek: riasztás, hiba, figyelmeztetés, értesítés, hibakeresés. Alapértelmezés: értesítés.

emergency_restart_threshold = 60
emergency_restart_interval = 60-as évek
# azt jelzi, hogy ha a SIGSEGV vagy SIGBUS hibákkal rendelkező php-cgi folyamatok száma meghaladja a emergency_restart_threshold-t a emergency_restart_interval értéken belül, akkor a php-fpm elegánsan újraindul. Ez a két lehetőség általában továbbra is alapértelmezett.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Elérhető egységek: s (másodperc), m (perc), h (óra) vagy d (nap) Alapegységek: s (másodpercek). Alapértelmezett: 0.

daemonize = igen
#后台执行fpm az alapértelmezett érték igen, és ha hibázni akarsz, megváltoztathatod nemre. Az FPM-ben különböző beállításokkal több folyamathalt futtathatunk. Ezek a beállítások külön-külön állíthatók be minden folyamatcsoporthoz.

Hallgasd = 127.0.0.1:9000
#fpm监听端口, vagyis a PHP által nginx-ben feldolgozott cím általában az alapértelmezett érték. Az elérhető formátumok: 'ip:port', 'port', '/path/to/unix/socket'. Minden folyamatcsoportot be kell állítani.

listen.backlog = -1
#backlog数 -1 korlátlan jelentést jelent, operációs rendszer által meghatározott állapotban, csak kommentáld ezt a sort. Forrás: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP állítsd be az any-t, hogy ne korlátozza az IP-t, ha más hosztok nginx-ét akarod beállítani az FPM folyamathoz, akkor be kell állítanod az IP-címet, amit elérhetsz a hallgatás árán. Az alapértelmezett érték bármi. Minden címet vessző választ el. Ha nincs beállítva, vagy üres, bármely szerver kérhet kapcsolatot

kuulata.tulajdonos = www
kuulata.csoport = www
listen.mode = 0666
#unix socket beállítási opció, ha TCP-vel használod a hozzáférést, itt kommentelhetsz.

felhasználó = www
csoport = www
#启动进程的帐户和组

pm = dinamikus #对于专用服务器, a PM statikus szintre állítható.
#如何控制子进程 a lehetőségek statikus és dinamikusak. Ha statikus van kiválasztva, a pm.max_children fix számú gyermekfolyamatot jelöl meg. Ha dinamikát választunk, azt a következő paraméterek határozzák meg:
pm.max_children #, a gyermekfolyamatok maximális száma
pm.start_servers #, a folyamatok száma a startupnál
pm.min_spare_servers # esetén garantáljuk a minimális számú ürtelen folyamatot, és hozz létre új gyermekfolyamatot, ha az alap folyamat kisebb az értéknél
pm.max_spare_servers#, biztosítsd a maximális számú üres folyamatot, ha az üres folyamat nagyobb, mint ez az érték, akkor ezt tisztázzák

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. Ez nagyon hasznos harmadik féltől származó modulok esetén, amelyeknél memóriaszivárgás lehet. Ha '0'-ra állítva, a kérést mindig elfogadják. Ez ekvivalens PHP_FCGI_MAX_REQUESTS környezeti változóval. Alapértelmezett: 0.

pm.status_path = /státusz
#FPM状态页面的网址. Ha nincsenek meg a beállítások, nem tudsz hozzáférni az állapot oldalhoz. Alapértelmezett: nincs. Munin monitorozást alkalmaznak

ping.path = /ping
#FPM监控页面的ping网址. Ha nincsenek meg a beállítások, nem tudsz hozzáférni a ping oldalhoz. Ez az oldal külső észlelésére szolgál, hogy az FPM életben van-e és képes reagálni a kérésekre. Fontos megjegyezni, hogy egy csapással (/) kell kezdődnie.

ping.response = pong
#用于定义ping请求的返回相应. HTTP 200-hoz szöveg/egyszerű formátumban jelenik meg. Alapértelmezett: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Ez az opció hasznos lehet olyan szkriptekhez, amelyeket valamilyen különleges okból nem állítanak fel php.ini a beállításokban a 'max_execution_time' miatt. Ha '0'-ra állítod, az 'Kikapcsolva' jelent. Megpróbálhatod megváltoztatni ezt az opciót, amikor gyakran találkozunk 502-es hibákkal.

request_slowlog_timeout = 10-es
#当一个请求该设置的超时时间后 a megfelelő PHP hívás stack adatai a lassú naplóba kerülnek. Ha a '0'-ra állítva 'Kikapcsolva' jelent

slowlog = log/$pool.log.slow
#慢请求的记录日志, használd request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Alapértelmezett érték: Az alapértelmezett nyitott fogletyű 1024, amely ulimit -n használatával nézhető meg, és módosítható az ulimit -n 2048-ban.

rlimit_core = 0
#设置核心rlimit最大限制值. Elérhető értékek: 'korlátlan', 0 vagy pozitív egész szám. Alapértelmezett érték: Rendszer-definiált érték.

chroot =
#启动时的Chroot目录. A definiált könyvtárnak abszolút útnak kell lennie. Ha nincs beállítás, a chroot nem használatos.

chdir =
#设置启动目录 a Chdir automatikusan elindulásakor elküldi a könyvtárba. A definiált könyvtárnak abszolút útnak kell lennie. Alapértelmezett: aktuális könyvtár, vagy/könyvtár (chroot esetén)

catch_workers_output = igen
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Ha nincs beállítva, az stdout és stderr a FastCGI szabályai szerint a /dev/null irányba kerül. Alapértelmezett: null.



PHP-FPM paraméterhangolás

pm = dinamikus; Jelzi, melyik folyamatmennyiség-kezelési módszert alkalmazzák

A dinamikus azt jelenti, hogy a PHP-FPM folyamatok száma dinamikus, a szám pm.start_servers az elején van megadva, ha több kérés érkezik, automatikusan nő, hogy a tétlen folyamatok száma ne legyen kevesebb pm.min_spare_servers-nál, és ha a folyamatok száma nagy, akkor annak megfelelően is kitakarítják, hogy a többletes folyamatok száma ne legyen több, mint pm.max_spare_servers

A statikus azt jelenti, hogy a PHP-FPM-ben lévő folyamatok száma statikus, és a folyamatok száma mindig az pm.max_children által megadott szám, és nem nő vagy csökken

pm.max_gyermek = 300; A statikus módban engedélyezett php-fpm folyamatok száma
pm.start_servers = 20; A dinamikus módban indított php-fpm folyamatok száma
pm.min_spare_servers = 5; A php-fpm folyamatok minimális száma dinamikus módban
pm.max_spare_servers = 35; A php-fpm folyamatok maximális száma dinamikus módban

Ha a pm statikus, akkor csak a pm.max_children paraméter érvényes. A rendszer meghatározott számú php-fpm folyamatot nyit meg

Ha a PM dinamikus, akkor a pm.max_children paraméter érvénytelen, és az utolsó három paraméter lép életbe. A rendszer a php-fpm futtatás elején indítja el pm.start_servers php-fpm folyamatokat, majd dinamikusan igazítja a php-fpm folyamatok számát pm.min_spare_servers és pm.max_spare_servers között a rendszer igényei szerint

Szóval, melyik PM módszert érdemes választani a szerverünkhöz? Valójában, akárcsak az Apache, a PHP programok futtatása nagyjából memóriaszivárgással jár majd végrehajtás után. Ezért egy php-fpm folyamat elején csak körülbelül 3M memóriát foglal el, és egy ideig futás után 20-30M-re emelkedik.

Nagy memóriával rendelkező szervereknél (például 8G vagy annál nagyobb) valójában inkább statikus max_children meghatározása megfelelőbb, mivel ez nem igényel további folyamatvezérlést, és növeli a hatékonyságot. Mivel a php-fpm folyamatok gyakori váltása is lassítja az időt, jobb lesz statikus effekteket bekapcsolni, amikor a memória elég nagy lesz. A mennyiség memória/30M alapján is megszerezhető, például a 8GB memóriát 100-ra lehet állítani, majd a php-fpm által fogyasztott memóriát 2G-3G alatt lehet irányítani. Ha a memória valamivel kisebb, például az 1G, akkor a statikus folyamatok számának megadása jobban támogatja a szerver stabilitását. Ez biztosítja, hogy a php-fpm csak elegendő memóriát kapjon, és kis mennyiségű memóriát oszt más alkalmazásoknak, ami a rendszer gördülékenyebbé teszi a működést.

Egy kis memóriával rendelkező szerver esetén, például egy VPS 256M memóriával, még ha 20M memória alapján is számítják ki, 10 php-cgi folyamat 200M memóriát fogyaszt, akkor a rendszer összeomlása normális lesz. Ezért próbáld meg szabályozni a php-fpm folyamatok számát, és miután nagyjából tisztáztad a többi alkalmazás által foglalt memóriát, határozz meg egy statikus kis számot, ami stabilabbá teszi a rendszert. Vagy használd a dinamikus módszert, mert a dinamikus módszer megszünteti a redundáns folyamatot és visszanyer némi memóriát, ezért ajánlott szervereken vagy VPS-en használni, ahol kevesebb memóriával van. A konkrét maximális mennyiséget memória/20M alapján kapjuk. Például egy 512M VPS esetén ajánlott a pm.max_spare_servers 20-ra állítani. A pm.min_spare_servers esetében ajánlott a szerver terhelésének megfelelően beállítani, és a megfelelőbb érték 5~10 között van.

200 egy 4G memóriával rendelkező szerveren rendben van (az én 1G tesztgépem, 64 a legjobb, ajánlott stressztesztet használni a legjobb értékért)

pm.max_requests = 10240;

A legnagyobb probléma a nginx php-fpm konfigurációs folyamatban a belső szivárgás: a szerver terhelése nem nagy, de a memória elfoglaltsága gyorsan nő, gyorsan felemészti a memóriát, majd elkezdi felemelni a swap partíciót, és a rendszer gyorsan leáll! Valójában a hivatalos bevezetés szerint a php-cgi-ben nincs memóriaszivárgás, és a php-cgi minden kérés befejezése után visszanyeri a memóriát, de nem szabadul fel az operációs rendszernek, ami miatt a php-cgi nagy mennyiségű memóriát foglal el.


A hivatalos megoldás az, hogy csökkentjük a PHP_FCGI_MAX_REQUESTS értékét, ha php-fpm használatot használunk, akkor a megfelelő php-fpm.conf a max_requests, ami azt jelenti, hány kérést küldenek a szál újraindításához, ezt az értéket megfelelően kell csökkenteni, így a php-fpm automatikusan felszabadítja a memóriát, nem pedig az interneten lévő 51200 nagy részét, stb., valójában van hozzá egy másik érték is kapcsolódó max_ Gyermekek, ennyi folyamat jön létre minden php-fpm alkalomnál, így a tényleges memóriafogyasztás max_children*max_requests* Minden kérés memóriát használ, ennek megfelelően becsülhetjük a memóriahasználatot, így nincs szükség szkriptek írására a megöléshez.

request_terminate_timeout = 30;

Maximális végrehajtási idő, konfigurálható php.ini-ben (max_execution_time)

request_slowlog_timeout = 2; Kapcsold be a lassú rönköket
slowlog = log/$pool.log.slow; Lassú fatörzsút

rlimit_files = 1024; Hozzáférés volt a php-fpm megnyitásához a fájlleírók megnyitásához





Előző:Alibaba Cloud SLB terheléselosztása HTTP egészségellenőrzési hibaelemzés
Következő:DZ X3.4 fájlellenőrzés hiányzó fájlok
 Háziúr| Közzétéve 2021. 11. 28. 13:42:00 |
[Gyakorlás] Ellenőrizd a php-fpm státusz információkat a Nginx-en keresztül
https://www.itsvse.com/thread-10180-1-1.html
 Háziúr| Közzétéve 2021. 12. 19. 10:48:43 |
 Háziúr| Közzétéve 2022. 01. 16. 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_spare_servers – a maximális gyermekek száma a 'tétlen' állapotban
; Alapértelmezett érték: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.max_spare_servers = 35
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep min_spare_servers
;             pm.min_spare_servers – a minimális számú gyermek a 'tétlen' állapotban
; Alapértelmezett érték: 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 – a startup során létrejött gyermekek száma.
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
; Megjegyzés: a lassú napló kötelező, ha request_slowlog_timeout be van állítva
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | GREP Slowlog
; - 'lassú napló'
; Megjegyzés: a lassú napló kötelező, ha request_slowlog_timeout be van állítva
slowlog = /alidata/log/php/$pool.log.slow
; A 'lassú napló' fájlba dobva. A '0' érték 'off'-ot jelent.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Állítsuk be a nyílt fájl descriptor rlimit a master processhez.
; rlimit_files = 1024
; Állítsd be a fő folyamat maximális magméret rlimitjét.
; rlimit_core = 0
; Állítsd be nyílt fájl descriptor rlimit.
; rlimit_files = 1024
; Állítsd be a maximális magméret rlimitjét.
; rlimit_core = 0
[root@old_server konferenszés] #
 Háziúr| Közzétéve 2022. 01. 16. 16:54:04 |
request_terminate_timeout = 10-es

Az alapértelmezett érték 0 másodperc, ami azt jelenti, hogy a PHP szkript továbbra is futni fog. Így, amikor az összes php-cgi folyamat elfoglalt, a Nginx+PHP WebServer már nem tudja kezelni az új PHP kéréseket, és a Nginx visszaadja a "502 Bad Gateway" rendszert a felhasználónak. request_terminate_timeout = 30-as slágerek használhatók
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com