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
|