Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11218|Odpowiedź: 4

Konfiguracja parametrów PHP-FPM i dostrajanie

[Skopiuj link]
Opublikowano 26.07.2017 09:20:54 | | |
php-fpm.conf ważne parametry są szczegółowo wyjaśnione

Pid = run/php-fpm.pid
#pid设置 zaleca się domyślne włączenie var/run/php-fpm.pid w katalogu instalacyjnym

error_log = log/php-fpm.log
#错误日志 domyślnym adresem jest var/log/php-fpm.log w katalogu instalacyjnym

log_level = powiadomienie
#错误级别. Dostępne poziomy to: alert, error, warning, notice, debug. Domyślnie: powiadomienie.

emergency_restart_threshold = 60
emergency_restart_interval = Lata 60.
# oznacza, że jeśli liczba procesów php-cgi z błędami SIGSEGV lub SIGBUS przekroczy emergency_restart_threshold w obrębie wartości emergency_restart_interval, php-fpm zostanie poprawnie zrestartowany. Te dwie opcje zazwyczaj pozostają domyślne.

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Dostępne jednostki: s (sekundy), m (minuty), h (godziny) lub d (dni) Domyślne jednostki: s (sekundy). Domyślne: 0.

daemonize = tak
#后台执行fpm domyślna wartość to tak, a jeśli chcesz debugować, możesz zmienić ją na nie. W FPM różne ustawienia mogą być używane do uruchamiania wielu pul procesów. Te ustawienia można ustawić indywidualnie dla każdej puli procesów.

listen = 127.0.0.1:9000
#fpm监听端口, czyli adres przetwarzany przez PHP w nginx, jest zazwyczaj wartością domyślną. Dostępne formaty to: 'ip:port', 'port', '/path/to/unix/socket'. Każda pula procesów musi być skonfigurowana.

listen.backlog = -1
#backlog数, -1 oznacza nieograniczone, określone przez system operacyjny, po prostu skomentuj tę linijkę. Źródło: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, ustaw dowolne tak, by nie ograniczały IP, jeśli chcesz ustawić nginx innych hostów do dostępu do tego procesu FPM, musisz ustawić adres IP, do którego można uzyskać dostęp kosztem słuchania. Domyślna wartość to dowolna. Każdy adres jest oddzielony przecinkiem. Jeśli nie jest ustawione lub jest puste, każdy serwer może zażądać połączenia

listen.owner = www
listen.group = www
listen.mode = 0666
#unix opcji ustawienia gniazda, jeśli korzystasz z TCP do dostępu, możesz skomentować tutaj.

użytkownik = www
grupa = www
#启动进程的帐户和组

pm = dynamiczne #对于专用服务器, pm można ustawić na statyczny.
#如何控制子进程 opcje są statyczne i dynamiczne. Jeśli wybrany jest statyczny element, stała liczba procesów potomnych jest określana przez pm.max_children. Jeśli wybrany jest dynamiczny, jest określany przez następujące parametry:
pm.max_dzieci #, maksymalna liczba procesów potomnych
pm.start_servers #, liczba procesów przy starcie
pm.min_spare_servers #, gwarantuj minimalną liczbę procesów bezczynności i tworz nowy proces potomny, jeśli proces bezczynny jest mniejszy niż ta wartość
pm.max_spare_servers#, upewnij się maksymalną liczbę procesów bezczynności; jeśli proces bezczynności jest większy niż ta wartość, zostanie ona wyczyszczona

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. Jest to bardzo przydatne dla modułów firm trzecich, które mogą mieć wycieki pamięci. Jeśli ustawisz '0', żądanie jest zawsze akceptowane. Równoważne PHP_FCGI_MAX_REQUESTS zmiennym środowiskowym. Domyślne: 0.

pm.status_path = /status
#FPM状态页面的网址. Jeśli nie masz tych ustawień, nie możesz uzyskać dostępu do strony statusu. Domyślnie: brak. Będzie wykorzystywany monitoring munin

ping.path = /ping
#FPM监控页面的ping网址. Jeśli nie masz tych ustawień, nie możesz uzyskać dostępu do strony ping. Ta strona służy do zewnętrznego wykrywania, czy FPM działa i może odpowiadać na żądania. Należy zauważyć, że musi zaczynać się od ukośnika (/).

ping.response = pong
#用于定义ping请求的返回相应. Zwraca tekst w formacie tekstowym/zwykłym dla HTTP 200. Domyślnie: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. Ta opcja może być przydatna w skryptach, które nie są przerwywane z jakiegoś szczególnego powodu php.ini 'max_execution_time' w ustawieniach. Ustawienie na '0' oznacza 'wyłączone'. Możesz spróbować zmienić tę opcję, gdy często pojawiają się błędy 502.

request_slowlog_timeout = 10 sekund
#当一个请求该设置的超时时间后 odpowiadające informacje z stosu wywołań PHP zostaną zapisane do wolnego logu. Ustawione na '0' oznacza 'Wyłączone'

slowlog = log/$pool.log.slow
#慢请求的记录日志, używaj z request_slowlog_timeout

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Wartość domyślna: Domyślny otwarty uchwyt to 1024, który można wyświetlić za pomocą ulimit -n i zmodyfikować przez ulimit -n 2048.

rlimit_core = 0
#设置核心rlimit最大限制值. Dostępne wartości: 'nieograniczone', 0 lub dodatnie liczby całkowite. Wartość domyślna: Wartość zdefiniowana przez system.

chroot =
#启动时的Chroot目录. Zdefiniowany katalog musi być absolutną ścieżką. Jeśli nie ma ustawienia, chroot nie jest używany.

chdir =
#设置启动目录 Chdir jest automatycznie wysyłany do tego katalogu przy jego uruchomieniu. Zdefiniowany katalog musi być absolutną ścieżką. Domyślne: aktualny katalog lub/katalog (po chrootingu)

catch_workers_output = tak
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. Jeśli nie jest ustawiony, stdout i stderr zostaną przekierowane do /dev/null zgodnie z zasadami FastCGI. Domyślne: Null.



Strojenie parametrów PHP-FPM

pm = dynamiczny; Wskazuje, która metoda zarządzania ilością procesu jest stosowana

dynamiczny oznacza, że liczba procesów php-fpm jest dynamiczna, liczba ta jest pm.start_servers określana na początku, jeśli jest więcej żądań, automatycznie wzrośnie, aby liczba procesów bezczynnych nie była mniejsza niż pm.min_spare_servers, a jeśli liczba procesów jest duża, zostanie również odpowiednio oczyszczona, aby liczba nadmiarowych procesów nie przekraczała pm.max_spare_servers

Statyczny oznacza, że liczba procesów w php-fpm jest statyczna, a liczba procesów zawsze odpowiada liczbie określonej przez pm.max_dzieci i nie rośnie ani nie zmniejsza

pm.max_dzieci = 300; Liczba procesów php-fpm włączonych w trybie statycznym
pm.start_servers = 20; Liczba procesów rozpoczynających php-fpm w trybie dynamicznym
pm.min_spare_servers = 5; Minimalna liczba procesów php-fpm w trybie dynamicznym
pm.max_spare_servers = 35; Maksymalna liczba procesów php-fpm w trybie dynamicznym

Jeśli pm jest statyczny, to tylko parametr pm.max_children jest prawidłowy. System otworzy określoną liczbę procesów php-fpm

Jeśli PM jest dynamiczny, parametr pm.max_children jest nieprawidłowy i ostatnie trzy parametry wchodzą w życie. System rozpocznie pm.start_servers procesy php-fpm na początku uruchomienia php-fpm, a następnie dynamicznie dostosowuje liczbę procesów php-fpm pomiędzy pm.min_spare_servers a pm.max_spare_servers zgodnie z potrzebami systemu

Więc którą metodę zarządzania projektem lepiej wybrać dla naszego serwera? W rzeczywistości, podobnie jak w Apache, uruchamianie programów PHP po uruchomieniu powoduje mniej więcej problemy z wyciekiem pamięci. Dlatego proces php-fpm zajmuje na początku około 3 mln pamięci, a po pewnym czasie działania wzrasta do 20-30 mln pamięci.

Dla serwerów z dużą pamięcią (np. 8G lub więcej) właściwiej jest określić statyczne max_children, ponieważ nie wymaga to dodatkowej kontroli procesu i zwiększa efektywność. Ponieważ częste przełączanie procesów php-fpm również opóźnia czas, lepiej włączyć efekty statyczne, gdy pamięć jest wystarczająco duża. Ilość można również uzyskać według pamięci/30M, na przykład 8GB pamięci można ustawić na 100, a zużycie pamięci przez php-fpm można kontrolować w 2G-3G. Jeśli pamięć jest nieco mniejsza, na przykład 1G, to określenie liczby procesów statycznych bardziej sprzyja stabilności serwera. Zapewnia to, że php-fpm otrzymuje tylko wystarczającą ilość pamięci i przydziela niewielką ilość pamięci innym aplikacjom, co sprawi, że system działa płynniej.

Dla serwera z małą pamięcią, takiego jak VPS z 256M, nawet jeśli jest obliczana według 20M pamięci, 10 procesów php-cgi zużywa 200M pamięci, wtedy awaria systemu powinna być normalna. Dlatego powinieneś starać się kontrolować liczbę procesów php-fpm i po przybliżonym wyjaśnieniu pamięci zajmowanej przez inne aplikacje, określić dla niej statyczną małą liczbę, co uczyni system bardziej stabilnym. Albo użyć metody dynamicznej, ponieważ metoda dynamiczna zakończy proces redundantny i odzyska część pamięci, dlatego zaleca się jej stosowanie na serwerach lub VPS z mniejszą ilością pamięci. Konkretna maksymalna ilość jest uzyskiwana na podstawie pamięci/20M. Na przykład dla VPS 512M zaleca się ustawienie pm.max_spare_servers na 20. Jeśli chodzi o pm.min_spare_servers, zaleca się ustawienie go zgodnie z obciążeniem serwera, a bardziej odpowiednia wartość to między 5~10.

200 na serwerze z pamięcią 4G jest w porządku (moja maszyna testowa 1G, 64 jest najlepsze, zaleca się stosowanie testów obciążeniowych, aby uzyskać najlepszą wartość)

pm.max_requests = 10240;

Największym problemem w procesie konfiguracji nginx php-fpm jest problem wycieków wewnętrznych: obciążenie serwera nie jest duże, ale zajęcie pamięci szybko rośnie, szybko ją zużywa, a potem zaczyna znierywać partycję swap, a system szybko się zawiesza! W rzeczywistości, według oficjalnego wprowadzenia, php-cgi nie ma wycieków pamięci, a php-cgi odzyskuje pamięć po każdym zakończeniu żądania, ale nie zostanie udostępnione systemowi operacyjnemu, co spowoduje, że duża część pamięci zostanie zajęta przez php-cgi.


Oficjalnym rozwiązaniem jest obniżenie wartości PHP_FCGI_MAX_REQUESTS, jeśli używamy php-fpm, odpowiadający php-fpm.conf to max_requests, co oznacza, ile żądań zostanie wysłanych do ponownego uruchomienia wątku, musimy odpowiednio obniżyć tę wartość, aby php-fpm automatycznie zwalniało pamięć, a nie większość z 51200 w Internecie itd., w rzeczywistości istnieje inna wartość z tym związana max_ Dzieci, tak wiele procesów zostanie ustanowionych za każdym razem, gdy PHP-FPM, tak aby rzeczywiste zużycie pamięci wynosiło max_children*max_requests* Każde żądanie zużywa pamięć, na podstawie czego możemy oszacować zużycie pamięci i nie ma potrzeby pisania skryptów do zabijania.

request_terminate_timeout = 30;

Maksymalny czas wykonania, konfigurowalny w php.ini (max_execution_time)

request_slowlog_timeout = 2; Włącz wolne kłody
slowlog = log/$pool.log.slow; Wolna ścieżka logarytmu

rlimit_files = 1024; Dodano ograniczenie na php-fpm do otwierania deskryptorów plików





Poprzedni:Alibaba Cloud SLB load balancing analizę błędów HTTP health check
Następny:Dz X3.4 Weryfikacja plików – brakujące pliki
 Ziemianin| Opublikowano 28.11.2021 13:42:00 |
[Ćwiczenie] Sprawdź informacje o statusie php-fpm przez Nginx
https://www.itsvse.com/thread-10180-1-1.html
 Ziemianin| Opublikowano 19.12.2021 10:48:43 |
 Ziemianin| Opublikowano 16.01.2022 15:26:55 |
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep max_spare_servers
;             pm.max_spare_servers – maksymalna liczba dzieci w 'bezczynności'
; Domyślna wartość: 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 – minimalna liczba dzieci w stanie 'bezczynności'
; Domyślna wartość: 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 – liczba dzieci stworzonych na starcie.
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
; Uwaga: slowlog jest obowiązkowy, jeśli request_slowlog_timeout jest ustawione
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | Grep Slowlog
; - 'slowlog'
; Uwaga: slowlog jest obowiązkowy, jeśli request_slowlog_timeout jest ustawione
slowlog = /alidata/log/php/$pool.log.slow
; Zrzut do pliku 'slowlog'. Wartość '0' oznacza 'wyłączone'.
; request_slowlog_timeout = 0
[root@old_server conf]# cat /alidata/server/php/etc/php-fpm.conf | grep rlimit
; Ustaw deskryptor open file rlimit dla procesu master.
; rlimit_files = 1024
; Ustaw maksymalny limit rozmiaru rdzenia dla procesu master.
; rlimit_core = 0
; Ustaw deskryptor open file rlimit.
; rlimit_files = 1024
; Ustaw maksymalny limit rozmiaru rdzenia.
; rlimit_core = 0
[root@old_server conf] #
 Ziemianin| Opublikowano 16.01.2022 16:54:04 |
request_terminate_timeout = 10 sekund

Domyślna wartość to 0 sekund, co oznacza, że skrypt PHP będzie kontynuował działanie. W ten sposób, gdy wszystkie procesy php-cgi są zajęte, serwer Nginx+PHP nie jest już w stanie obsługiwać nowych żądań PHP, a Nginx zwraca użytkownikowi "502 Bad Gateway". request_terminate_timeout = Można użyć 30 sekund
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com