Pracowałem nad wdrożeniem relatywnie dużej aplikacji Railsów (Rails 2.3.5), a ostatnio wykonałem testy obciążenia, które odkryliśmy, że przepustowość strony jest znacznie poniżej oczekiwanego poziomu ruchu.Pasażer hostował aplikację Rails * boleśnie * wolno, ale serwer jest bestią
Pracowaliśmy na standardowym serwerze 32-bitowym, 3GB pamięci RAM z Centos, a my uruchomiliśmy Ruby Enterprise Edition (najnowszy build), Passenger (najnowszy build) i Nginx (najnowszy build) - kiedy jest tylko jeden lub dwa użytkownikom strona działa dobrze (jak można by się tego spodziewać), jednak gdy spróbujemy zwiększyć obciążenie do ~ 50 równoczesnych żądań, całkowicie umiera. (Apache raport Bench ~ 2,3 req/s, co jest straszny)
Prowadzimy RPM i próbuje ustalić, gdzie kwestia obciążenia, ale to dość równomiernie rozłożone na szynach, SQL i Memcached, więc jesteśmy mniej lub więcej przeszukiwania i optymalizacji kodu.
Z czystej desperacji wyłączyliśmy dużą instancję EC2 (Ubuntu 9.10, 7,5 GB RAM, 2 Compute Units/Cores) i skonfigurowaliśmy tę samą konfigurację co oryginalny serwer, a gdy jest więcej zasobów, wciąż widzieliśmy żałosne wyniki.
Po spędzeniu zbyt dużej ilości czasu na optymalizacji, zabawie z konfiguracją buforowania itp. Postanowiłem przetestować przepustowość niektórych kundli, a ta-da, działają znacznie lepiej niż Pasażer.
Obecnie konfiguracja jest 15x kundle są uzyskiwane w przybliżeniu przez Nginx, i zdaje się, że spełnienie naszych wymagań obciążenia tylko ale to nie wystarczy, aby mnie całkiem komfortowo będzie żyć ... Co ja zastanawiałem się, czy ktoś wie, niektórych możliwych przyczyn ...?
Moja konfiguracja dla pasażera/nginx było:
- nginx robotników: próbowali między 1 a 10, chociaż zazwyczaj trzy.
- Maksymalny rozmiar puli pasażera: 10 - 30 (tak, te liczby są dość wysokie)
- Kolejkowanie globalne dla pasażerów: próbowano zarówno włączania, jak i wyłączania.
- nginx GZip na: tak
To może zapłacić, aby pamiętać, że mieliśmy zwiększyła nginx maksymalny rozmiar ciała klienta do 200m w celu umożliwienia przesyłania dużych plików plików.
sugestie każdym razie byłoby naprawdę docenione, a kundle pracuje dobrze zmienia jak robimy rzeczy dużo i będę naprawdę wolą używać Pasażer - poza tym, czyż nie powinien zrobić to łatwiejsze i skuteczniejsze ?
Oto wyjaśnienie: Różnica polega na tym, że kundle odradzają się w oddzielnych instancjach Twojej aplikacji, aby każda aplikacja miała własną pulę sql, podczas gdy pasażer wyświetla nowe wystąpienia z pojedynczego inicjatora aplikacji (co jest znacznie szybsze), więc udostępnia pulę sql. – hurikhan77
Dzięki za wyjaśnienie - kiedy testowaliśmy zmiany w pulach (cóż, gdy przeczytałem sugestię) stało się dla mnie bardzo jasne - jak mędrcy często mówili, czasami potrzebujesz tylko pary oczu;) –
Ty może chcieć zmienić swój tytuł, ponieważ został rozwiązany jako powiązany z non-nginx. Stanie się tak przy każdym wdrożeniu pasażera, jeśli ustawisz zbyt mały rozmiar puli sql. – hurikhan77