Konfiguracja PHP-FPM: użyj PM static dla maksymalnej wydajności

Konfiguracja PHP-FPM: użyj PM static dla maksymalnej wydajności

Nieedytowana wersja tego artykułu została pierwotnie opublikowana w dniu haydenjames.io i opublikowano tutaj za jej zgodą autor.

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 pełna lista dyrektyw globalnych php-fpm.conf.

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 pełna lista parametrów regulatora częstotliwości procesora.

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 parametr force_turbo w Raspberry Pi, z którym panel RPi będzie korzystał z regulatora jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,, gdzie poprawa wydajności będzie bardziej zauważalna ze względu na niskie taktowanie procesora.

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.

Konfiguracja PHP-FPM: użyj PM static dla maksymalnej wydajności

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 z Linuksem, filtrowane według u (użytkownika) i nazwy użytkownika PHP-FPM. Wyświetlanych jest tylko pierwszych 50 procesów (nie policzyłem dokładnie), ale zasadniczo góra pokazuje najważniejsze statystyki, które mieszczą się w oknie terminala. W tym przypadku posortowane według% procesora (%CPU). Aby zobaczyć wszystkie 100 procesów PHP-FPM, uruchom komendę:

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 opisane w tym poście na temat błędu serwera. W tym przypadku wartość pm.min była zbyt mała, a ponieważ ruch sieciowy jest bardzo zróżnicowany i ma wysokie szczyty oraz głębokie doliny, trudno jest odpowiednio dostosować pm dynamiczny. Zwykle używa się pm ondemand, zgodnie z sugestią w tym samym poście. Ale to jest jeszcze gorsze, ponieważ ondemand kończy bezczynne procesy do zera, gdy ruch jest niewielki lub nie ma go wcale, a mimo to nadal będziesz narażony na obciążenie związane ze zmianą ruchu. Chyba, że ​​ustawisz ogromny czas oczekiwania. I wtedy lepiej skorzystać po południu.statyczny + duża liczba pm.max_requests.

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 ab. Jeśli procesy PHP-FPM znajdują się w pamięci, wydajność wzrasta kosztem zużycia pamięci w miejscu, w którym oczekują. Znajdź najlepszą opcję dla siebie.

Konfiguracja PHP-FPM: użyj PM static dla maksymalnej wydajności

Źródło: www.habr.com

Dodaj komentarz