Skocz do zawartości
dan

Szybkość generowania strony PHP-FPM a FastCGI

Polecane posty

Mam sobie VPS, Debian 6, OpenVZ. Direct Admin, CB2.0. Tak sobie testuję ustawienia i wychodzi, że czas generowania strony przy konfiguracji PHP jako FastCGI jest dwukrotnie niższy niż przy konfiguracji PHP-FPM. Testy przeprowadzałem o różnych porach dnia, żeby wyeliminować "przycinkę" maszyny-matki VPSa.

 

Czy faktycznie narzut na obsługę PHP-FPM jest tak duży, iż powoduje wolniejsze generowanie strony niż w przypadku korzystania z FastCGI?

 

Konfiguracja PHP-FPM czas generowania strony to 0,12-0,14, gdy dla FastCGI to 0,25-0,35 sek.(wyniki średnie - kilkukrotne odświeżanie strony)

 

PHP 5.4 + APC

 

To normalne? Czy coś nie tak w konfiguracji? Ktoś ma jakieś doświadczenia w konfiguracji php w stosunku do uzyskiwanej szybkosci?

 

I ostatecznie jako że zależy mi na szybkości generowania strony jaka jest przewaga w stosowaniu PHP-FPM w stosunku do FasCGI?

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sam sobie przeczysz. Bo twierdzisz, że php-fpm powoduje wolniejsze generowanie strony niż FastCGI, a podając czasy, to czas FPM jest od tego FastCGI... niższy, więc wypada, że FPM szybciej przetwarza żądania...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Moja pomyłka - źle zredagowałem post, oczywiście dane na odwrót, tj. FastCGI jest faktycznie szybszy od PHP-FPM, czyli 0,12-0,14 FastCGI do 0,25-0,35 sek. dla PHP-FPM.

@kafi - dziękuję za zwrócenie uwagi

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Gwoli ścisłości to php-fpm też działa po fastcgi (FastCGI Process Manager). Podejrzewam, że różnica w wydajności wynika prędzej z Twojej konfiguracji niż różnic między menadżerami procesów. Ciężko jednak powiedzieć coś konkretniej, bo nie wiadomo ani jak to testowałeś ani na jakiej konfiguracji jednego i drugiego.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

właśnie wróciłem do testowania, lekko zmienione środowisko.

Strona testowa to joomla 2.5, php 5.5.1 z opcache.

Sposób pomiaru: na początku korzystalem z dodateku do firefoxa, który podaje czas od żądania do pierwszej odpowiedzi z serwera. Jednak po zapytaniach o sposób pomiaru doszedłem do wniosku, że może być winny zarówno czas generowania strony jak i obsługa wygenerowanej od żądania do wysyłki do klienta. Tak więc odpaliłem konsolę debugowania joomli.

I tak (po drugim odpaleniu po wypełnieniu cache):

php-fpm:

Application 0.001 seconds (+0.001); 0.34 MB (+0.343) - afterLoad
Application 0.035 seconds (+0.034); 1.88 MB (+1.542) - afterInitialise
Application 0.039 seconds (+0.003); 2.24 MB (+0.358) - afterRoute
Application 0.056 seconds (+0.018); 2.73 MB (+0.490) - afterDispatch
Application 0.128 seconds (+0.072); 4.23 MB (+1.501) - beforeRenderModule mod_roknavmenu ()
Application 0.157 seconds (+0.029); 4.86 MB (+0.626) - afterRenderModule mod_roknavmenu ()
Application 0.189 seconds (+0.032); 4.90 MB (+0.042) - afterRender

przeglądarka dostała cokolwiek od serwera po 0,313 sek.

 

Fastcgi:

Application 0.000 seconds (+0.000); 0.33 MB (+0.332) - afterLoad
Application 0.017 seconds (+0.017); 1.87 MB (+1.542) - afterInitialise
Application 0.020 seconds (+0.003); 2.23 MB (+0.357) - afterRoute
Application 0.027 seconds (+0.008); 2.72 MB (+0.490) - afterDispatch
Application 0.045 seconds (+0.018); 4.22 MB (+1.501) - beforeRenderModule mod_roknavmenu ()
Application 0.054 seconds (+0.009); 4.85 MB (+0.626) - afterRenderModule mod_roknavmenu ()
Application 0.071 seconds (+0.017); 4.89 MB (+0.042) - afterRender

przeglądarka dostała cokolwiek po 0,204 sek.

 

Serwer to VPS OpenVZ, Debian 6 na którym jest tylko ta strona i nikt więcej nie korzysta. Testy powtarzałem o różnych porach.

 

Zmiana php-fpm na fastcgi przez zmianę w konfiguracji DA options.conf i rekompilacji php oraz w ramach desperacji apache.

 

@megi - no właśnie wiem, że php-fpm korzysta z fastcgi i to mnie dziwi, że takie różnice wychodzą...

 

Jakieś sugestie, gdzie szukać przyczyny? Ew. jakie pliki konfiguracyjne wkleić, żeby bardziej doświadczeni mieli podstawę do wypowiedzi?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja bym pewnie zaczął od uruchomienia obu procesów pod

strace -ff -ttT -s 10000 -o fcgi.strace /path/to/php-fcgi --opcje-php

(dla php-fpm analogicznie). Masz duże różnice w czasie wykonania samego kodu PHP, co nie ma żadnego sensu patrząc po architekturze php-fcgi i php-fpm (po odebraniu requestu obydwa robią dokładnie to samo).

 

Dasz sobie wyciąć obie nerki, że obydwa phpy korzystają z tych samych ustawień (php.ini)? Porównywałeś `phpinfo()`? php-fpm na pewno korzysta z opcache? Wyłącz go w obu SAPI i wtedy porównaj wyniki, może się okaże, że się to jakoś żre z fpmem.

 

Może masz php-fpm skonfigurowane tak, że uruchamia jakąś dużą pulę procesów, która wypycha cache z pamięci?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@blackfire, @megi - dzięki za sugestie. Przekopałem się przez konfiguracje. Okazało się, że php-fpm ustawia open_basedir a konfiguracja przez fastcgi nie. Stąd różnica w prędkości odpalania skryptów.

 

Jakie niebezpieczeństwo wnosi wyłączenie open_basedir przy korzystaniu z php-fpm, biorąc pod uwagę, że php jest uruchomiane jako dany user? Czy brak ustawienia open_basedir nadaje się na środowisko produkcyjne? Jak ustawiacie u siebie kwestie zabezpieczenia PHP na produkcyjnych serwerach?

Edytowano przez dan (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×