2015-03-17 11 views
11

Mam serwer Nginx + PHP5-FPM z kilkoma witrynami o dużym natężeniu ruchu.PHP5-FPM statyczne, dynamiczne czy na żądanie?

Z mojego zrozumienia PHP5-FPM basenów config, zrozumiałem, że:

statyczne = może być używany do natychmiastowego tworzenia procesów potomnych N więc nie muszą być otwarte/re-otwarty, są one już otwarte i mogą być używane w razie potrzeby, inaczej "śpią".

dynamic = można użyć do otwarcia ograniczonej liczby procesów podrzędnych i ponownego odrodzenia, a następnie po osiągnięciu limitu (min/max serwerów).

ondemand = Podaję maksymalną liczbę procesów podrzędnych do utworzenia, a następnie procesy potomne są tworzone na żądanie, gdy są potrzebne, i zamykane, gdy nie są już potrzebne, utrzymując niskie zużycie pamięci, ale wydłużając czas odpowiedzi o kilka milisekund.

Z moich testów z witryny WordPress wysokiego ruchu, zauważyłem, że:

Jeśli używam „statyczne”, na stronie internetowej jest na pewno szybszy i może obsługiwać natychmiast dużą liczbę jednoczesnych połączeń, ale pamięć zawsze zwiększa jego użycie, a po N godzinach wydaje się, że używa prawie całkowitej dostępnej pamięci RAM. Więc muszę używać cronjob do okresowego (co 1 godzinę) przeładowania PHP5-FPM z ponownym załadowaniem /etc/init.d/php5-fpm.

Jeśli używam "dynamiczny", to zużywa mniej pamięci RAM, ale po N równoczesnych połączeń występują częste błędy 502 (ale być może nie skonfigurowałem go zbyt dobrze).

Jeśli używam "ondemand", strona jest nieco wolniejsza (np. Czas odpowiedzi +50/100ms), ale może obsłużyć cały duży ruch bez użycia zbyt dużej pamięci RAM.

Więc moim osobistym wnioskiem byłoby, że "ondemand" jest naprawdę najlepszą metodą użycia w kategoriach niskiego/kontrolowanego użycia pamięci, jedynym minusem jest czas reakcji +50/100 ms, ale w moim przypadku nie jest to wielki problem.

Czy moje założenia są prawidłowe?

+3

Sidenote: można ustawić 'pm.max_requests' mieć PHP-FPM pracowników restart po wnioski X obejść wycieku pamięci bez użycia crona i tak OnDemand z odpowiednią ilością pracowników rozpoczął natychmiast jest dobra. –

+0

„ale pamięć zawsze zwiększa jego wykorzystanie” --- jak dokładnie sprawdzić, czy? – zerkms

+0

André Zauważyłem, że nawet z pm.max_requests ustawiony na 50 Wzrosty pamięci (Wordpress + niestandardowe tematyczne + 20 wtyczek załadowany). – user2972081

Odpowiedz

3

Nie wspomnisz, DLACZEGO chcesz zachować niską pamięć. Zakładając, że ten komputer jest dedykowany do obsługi PHP-FPM, utrzymywanie niskiego poziomu pamięci w żaden sposób nie pomoże twojej aplikacji. Masz pamięć, użyj jej.

Dlatego w tym przypadku najlepszym wyborem jest "static", z ustawionym max_requests na coś, co będzie pod kontrolą przecieki pamięci (jeśli je posiadasz).

Jeśli to urządzenie jest współdzielone z innymi zadaniami, to utrzymywanie niskiej wartości pamięci jest idealne. W tym przypadku "dynamiczny" jest najlepszym kompromisem między szybkością a wykorzystaniem pamięci.

"ondemand" to dobry wybór tylko wtedy, gdy silnik PHP-FPM będzie używany rzadko, a głównym celem maszyny jest coś innego.

1

Możesz skonfigurować PHP-FPM tak, aby automatycznie uruchamiał się ponownie, wykrywając, czy procesy potomne umierają w określonym czasie.

W konfiguracji globalnej "php-fpm.conf" można ustawić restart PHP-FPM, jeśli 5 procesów potomnych zginie w ciągu 1 minuty i odczekać 10 sekund, zanim to nastąpi.

// php-fpm.conf 
emergency_restart_threshold = 5 
emergency_restart_interval = 1m 
process_control_timeout = 10s 

Dzięki temu można dalej używać "dynamic" bez użycia crona.

Powiązane problemy