Z nadmiaru wolnego czasu postanowiłem, że coś porobię przy mojej stronie firmowej linuxit.pl. Mam pod nią wykupiony hosting na vps i na początku postawiłem całość na apache’u i php w trybie fastcgi. Działało jak należy, czyli dobrze :) Ale nie byłbym sobą jakbym nie zdecydował się sprawdzić działania strony, a raczej cms-a na innym serwerze, jakim jest nginx. Nie miałem z nim wcześniej doczynienia, więc tym bardziej chciałem przetestować takie rozwiązanie.

Przeniesienie cms-a i jego odpalenie nie było czymś nadmiernie skomplikowanym. Wszystkie pakiety były dostępne w repozytoriach: nginx w epel, php-fpm w remi. Jak widać korzystam ze starego (nie tak bardzo znowu) i poczciwego centosa 6, bo do innych dystrybucji nie mam aż takiego zaufania. Ok, działają, ale uważam, że jeśli potrzebuję czegoś stabilnego i działającego jak należy to właśnie „prominent north american vendor” to zapewnia :) A wracając do tematu, używałem (nie pamiętam dlaczego) repozytorium atomic i wszystko było przez pewien czas ok. Zainstalowałem nginx i php-fpm, dopasowałem konfigi vhosta i php dla strony, przetestowałem i uruchomiłem produkcyjnie, bo wszystko świetnie działało. Sprawdziłem wydajność serwera – statycznie około 1000 requestów/s, cms około 3 requesty/s. Czyli szału nie ma (apache zapewniał podobne wartości), a nawet jest słabo jeśli chodzi o wydajność skryptów php.

Niewiele myśląc doinstalowałem pakiet php-pecl-apc, bo w końcu php-fpm powinno zapewniać jego poprawne działanie (to jest duży plus na korzyść php-fpm w stosunku do apache’owego mod_fcgid – możemy wykorzystać pamięć współdzieloną) a sam akcelerator powinien zapewnić zwiększenie wydajności generowania bytecode’u php. Sprawdziłem sobie wynik phpinfo, ale jakoś dziwnie mało wzmianek w szukajce było – wersja www informowała tylko o fakcie ładowania konfiguracji dla modułu. Czyli jednym słowem coś dzwoni, ale jeszcze nie wiemy gdzie. Włączyłem w konfiguracji, aby moduł ładował się w trybie cli i uruchomiłem php -i  w konsoli. Oczom mym ukazał się piękny komunikat, że modułu apc.so nie można załadować, bo jedna z funkcji nie jest rozpoznawana. Kiszka, bo moduł pochodzi z paczki, która jest dopasowana do tej konkretnej wersji php. Wywaliłem repozytorium atomic i sprawdziłem, czy w pozostałych jest php-fpm. Niestety nie było…

Ale, ale znamy się z panem rhel-em nie od dzisiaj i wiemy, że w takich przypadkach istnieje repozytorium remi, które zawiera świeżutkie wersje php, mysql i im podobne. Usunąłem wszystkie paczki z atomica, wyłączyłem go, a następnie podpiąłem remiego. Wszystko co usunięte doinstalowałem ponownie, odtworzyłem konfiguracje i uruchomiłem wszystkie usługi ponownie. I widzę, że wszystko ładuje się popranie :) Sprawdziłem więc jak się ten osławiony apc sprawuje i czy faktycznie jest o czym pisać te pieśni internetowe. Uruchomiłem niezniszczalny ab z takimi samymi parametrami jak dla wersji bez apc i… Trzykrotny przyrost wydajności w przetwarzaniu skryptów php dla cms-a pozytywnie mnie zaskoczył. Spodziewałem się różnicy od 50 do 100%, a tu 200% :) Reasumując – jak używasz nginx z php-fpm lub apache i mod_php (lub php-fpm przez mod_fastcgi) to koniecznie włącz moduł apc – daje baaardzo wymierne korzyści, które na pewno przebiją zwiększone zapotrzebowanie na pamięć, która pewnie i tak jest głównym ograniczeniem dla małych VPS-ów. Ja przetestowałem i jestem zadowolony :)