Nieedytowana wersja tego artykułu została pierwotnie opublikowana w dniu
Powiem ci w skrócie, jak najlepiej skonfigurować PHP-FPM, aby zwiększyć przepustowość, zmniejszyć opóźnienia i bardziej spójnie wykorzystywać procesor i pamięć. Domyślnie linia PM (menedżer procesów) w PHP-FPM to dynamiczny, a jeśli nie masz wystarczającej ilości pamięci, lepiej zainstalować ondemand. Porównajmy 2 opcje sterowania w oparciu o dokumentację php.net i zobaczmy, czym różni się od nich mój ulubiony statyczny po południu dla dużego ruchu:
po południu = dynamiczny — liczba procesów potomnych jest konfigurowana dynamicznie w oparciu o następujące dyrektywy: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = na żądanie - procesy tworzone są na żądanie (w odróżnieniu od tworzenia dynamicznego, gdy wraz ze startem usługi uruchamiane są serwery pm.start_servers).
pm = statyczny — liczba procesów potomnych jest stała i jest wskazywana przez parametr pm.max_children.
Aby uzyskać szczegółowe informacje, zobacz
Podobieństwa pomiędzy menedżerem procesów PHP-FPM a kontrolerem częstotliwości procesora
Może to wydawać się nie na temat, ale zamierzam połączyć to z tematem konfiguracji PHP-FPM. Kto choć raz nie doświadczył spowolnienia procesora – na laptopie, maszynie wirtualnej czy serwerze dedykowanym? Pamiętasz skalowanie częstotliwości procesora? Opcje te są dostępne dla nix i Windows mogą poprawić wydajność i czas reakcji systemu, zmieniając ustawienie przepustnicy procesora z ondemand na wydajność*. Tym razem porównajmy opisy i przyjrzyjmy się podobieństwom:
gubernator = na żądanie — dynamiczne skalowanie częstotliwości procesora w zależności od aktualnego obciążenia. Szybko przeskakuje do maksymalnej częstotliwości, a następnie zmniejsza ją w miarę wydłużania się okresów bezczynności.
gubernator=konserwatywny= dynamiczne skalowanie częstotliwości w zależności od aktualnego obciążenia. Zwiększa i zmniejsza częstotliwość płynniej niż na żądanie.
Gubernator = wydajność — częstotliwość jest zawsze maksymalna.
Aby uzyskać szczegółowe informacje, zobacz
Widzisz podobieństwa? Chciałem pokazać to porównanie, żeby przekonać Was, że najlepiej z niego skorzystać po południu statyczne dla PHP-FPM.
Dla parametru regulatora procesora jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory, pomaga bezpiecznie zwiększyć wydajność, ponieważ jest prawie całkowicie zależna od limitu procesora serwera. Do tego oczywiście dochodzą jeszcze takie czynniki jak temperatura, poziom naładowania baterii (w laptopie) i inne skutki uboczne ciągłego działania procesora na 100%. Ustawienie wydajności zapewnia najszybszą wydajność procesora. Poczytaj np. o
Używanie pm static w celu osiągnięcia maksymalnej wydajności serwera
Opcja PHP-FPM po południu statyczne w dużej mierze zależy od wolnej pamięci na serwerze. Jeśli jest mało pamięci, lepiej wybrać ondemand lub dynamiczny. Z drugiej strony, jeśli masz pamięć, możesz uniknąć narzutu na menedżera procesów PHP, ustawiając pm statyczny do maksymalnej wydajności serwera. Innymi słowy, jeśli wszystko jest dobrze obliczone, trzeba to ustalić po południu.statyczny do maksymalnej ilości procesów PHP-FPM, które można wykonać, bez powodowania problemów z małą ilością pamięci lub pamięci podręcznej. Ale nie na tyle, aby przytłoczyć procesory i gromadzić kilka operacji PHP-FPM oczekujących na wykonanie.
Na powyższym zrzucie ekranu serwer ma pm = statyczny i pm.max_children = 100, a to zajmuje około 10 GB z dostępnych 32. Zwróć uwagę na podświetlone kolumny, tutaj wszystko jest jasne. Na tym zrzucie ekranu było około 200 aktywnych użytkowników (ponad 60 sekund) w Google Analytics. Na tym poziomie około 70% procesów potomnych PHP-FPM jest nadal bezczynnych. Oznacza to, że PHP-FPM jest zawsze ustawione na maksymalną ilość zasobów serwera niezależnie od aktualnego ruchu. Bezczynny proces czeka na szczyty ruchu i natychmiast reaguje. Nie musisz czekać aż pm utworzy procesy potomne, a następnie zakończy je po wygaśnięciu okresu pm.process_idle_timeout. Ustawiłem wartość na bardzo wysoką pm.max_requestsponieważ jest to działający serwer bez wycieków pamięci w PHP. Możesz zainstalować pm.max_requests = 0 ze statycznym, jeśli masz całkowitą pewność co do istniejących i przyszłych skryptów PHP. Ale lepiej z czasem ponownie uruchomić skrypty. Ustaw dużą liczbę żądań, ponieważ chcemy uniknąć niepotrzebnych kosztów popołudniowych. Przynajmniej na przykład pm.max_requests = 1000 - w zależności od ilości pm.max_children i liczbę żądań na sekundę.
Zrzut ekranu przedstawia polecenie
top -bn1 | grep php-fpm
Kiedy używać pm ondemand i dynamic
Jeśli używasz pm dynamiczny, pojawiają się takie błędy:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
Spróbuj zmienić parametr, błąd nie zniknie, np
PM dynamiczny zwłaszcza ondemand może się przydać, jeśli masz wiele pul PHP-FPM. Na przykład hostujesz wiele kont cPanel lub wiele witryn internetowych w różnych pulach. Mam serwer z, powiedzmy, ponad 100 kontami cpanel i około 200 domenami, a pm.static ani nawet dynamic mnie nie uratuje. Wszystko, czego tu potrzebujesz, to ondemandw końcu ponad dwie trzecie witryn internetowych generuje niewielki ruch lub nie generuje go wcale ondemand wszystkie procesy potomne odpadną, co pozwoli nam zaoszczędzić dużo pamięci! Na szczęście twórcy cPanel zauważyli to i ustawili wartość na domyślną ondemand. Poprzednio, gdy wartość domyślna wynosiła dynamiczny, PHP-FPM w ogóle nie był odpowiedni dla obciążonych serwerów współdzielonych. Wielu korzystało suPHP, ponieważ godz dynamiczny zużywana pamięć nawet przy bezczynnych pulach i kontach cPanel PHP-FPM. Najprawdopodobniej, jeśli ruch jest dobry, nie będziesz hostowany na serwerze z dużą liczbą pul PHP-FPM (hosting współdzielony).
wniosek
Jeśli używasz PHP-FPM i ruch jest duży, menedżerowie procesów ondemand и dynamiczny dla PHP-FPM będzie ograniczona przepustowość ze względu na nieodłączny narzut. Zrozum swój system i skonfiguruj procesy PHP-FPM zgodnie z maksymalną wydajnością serwera. Pierwszy zestaw pm.max_children w zależności od maksymalnego wykorzystania po południu dynamiczny lub ondemand, a następnie zwiększ tę wartość do poziomu, przy którym pamięć i procesor będą działać bez przeciążenia. Zauważysz to dzięki po południu statyczne, ponieważ masz wszystko w pamięci, skoki ruchu będą z czasem powodować mniejsze skoki wydajności procesora, a średnie obciążenie serwera i procesora wyrówna się. Średni rozmiar procesu PHP-FPM zależy od serwera WWW i wymaga ręcznej konfiguracji, dlatego menedżerowie procesów są bardziej zautomatyzowani dynamiczny и ondemand - bardziej popularny. Mam nadzieję, że artykuł był przydatny.
UPD Dodano wykres porównawczy
Źródło: www.habr.com