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
|