php-fpm: pomaga zrozumieć serwery początkowe, serwery min_spare, serwery max_spare

10

Próbuję dostrojenia mojej instalacji PHP-FPM na moim serwerze, a ja mam problemy ze zorientowaniem się, co zrobić z pm.start_servers, pm.min_spare_serversi pm.max_spare_serverszmiennych. ja używampm = dynamic

pm.max_childrenjest całkowicie jasne. Każdy proces potomny obsługuje jednocześnie 1 klienta WWW. Ok. Co to jest „serwer”? Oczywiście, w oparciu o domyślną konfigurację, którą mam, 1 serwer może obsłużyć więcej niż 1 dziecko. Jaki jest górny limit? Czego powinienem użyć jako ogólnej zasady dla # dzieci / serwera? Czy w ogóle jest to związane? Na pewnym forum ktoś twierdził, że # serwerów powinno być 2 x # rdzeni procesora, ale widziałem zalecane konfiguracje, w których liczba była znacznie wyższa, 40-50.

Ani dokumentacja PHP, ani wiele artykułów o „tuningu php-fpm” w ogóle nie były pomocne.

Bintz
źródło

Odpowiedzi:

14

Zasadniczo liczba procesów, które php-fpm będzie uruchamiać w dowolnym momencie, jest bardzo konfigurowalna, jeśli ustawisz dynamictak, jak robisz. Przy ustawieniu statictam będzie zawsze być, że wiele procesów podrzędnych uruchomiony. Zasadniczo ustawia się na dynamiczny, aby oszczędzać zasoby. Każdy proces potomny może obsłużyć jedno żądanie. Górny limit zależy od tego, jak ciężka jest twoja aplikacja php i jaki ruch masz. Powinieneś także obliczyć średnie zużycie pamięci dla każdego dziecka i upewnić się, że NIGDY nie pozwalasz, aby liczba dzieci przekroczyła ilość pamięci RAM zainstalowanej na twoim serwerze, inaczej zaczniesz zamieniać, a nawet jądro rozpocznie proces zabijania.

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives:
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
; Note: This value is mandatory.

Ustawiając te opcje, weź pod uwagę następujące kwestie:

  • Jak długo trwa Twoja średnia prośba?
  • Jaka jest maksymalna liczba jednoczesnych osób odwiedzających witrynę (witryny)?
  • Ile średnio pamięci zużywa każdy proces potomny?
gbolo
źródło
3
Bardzo pomocne, dzięki za wgląd. Przydatne również do obliczeń, ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'aby zobaczyć, ile pamięci ma każdy pracownik. zaczerpnięte z community.webcore.cloud/tutorials/…
Matt The Ninja