Passenger hosted rails app * boleśnie * powoli, ale serwer to bestia

Pracowałem nad wdrożeniem stosunkowo dużej aplikacji Rails (Rails 2.3.5) i ostatnio wykonując testy obciążenia odkryliśmy, że przepustowość witryny jest znacznie poniżej oczekiwanego poziomu ruchu.

Działaliśmy na standardowym 32-bitowym serwerze, 3GB PAMIĘCI RAM z Centos, a także uruchamialiśmy Ruby Enterprise Edition( najnowsza wersja), Passenger (najnowsza wersja) i Nginx (Najnowsza Wersja) - gdy jest tylko jeden lub dwóch użytkowników witryna działa dobrze (jak można się spodziewać) jednak gdy staramy się zwiększyć obciążenie do ~ 50 jednoczesnych żądań, całkowicie umiera. (Apache Bench report ~2.3 req / sec, czyli straszne )

Uruchamiamy RPM i próbujemy określić, gdzie jest problem z ładowaniem, ale jest on dość równomiernie rozłożony na Rails, SQL i Memcached, więc mniej więcej przechodzimy i optymalizujemy bazę kodu.

Z czystej desperacji uruchomiliśmy dużą instancję EC2 (Ubuntu 9.10, 7.5 GB RAM, 2 jednostki obliczeniowe/rdzenie) i skonfigurowaliśmy to samo konfiguracja jak na oryginalnym serwerze, a mimo, że jest więcej zasobów, wciąż widzieliśmy żałosne wyniki.

Tak więc, po spędzeniu zbyt dużo czasu próbując zoptymalizować, bawiąc się konfiguracją buforowania itp postanowiłem przetestować przepustowość niektórych Kundli, i ta-da, są one znacznie lepiej niż pasażera.

Obecnie konfiguracja to 15x kundle proxyowane przez Nginx, i wydaje się, że spełniamy nasze wymagania obciążenia po prostu, ale to nie do końca na tyle, żebym czuł się komfortowo z występem na żywo... Zastanawiam się, czy ktoś zna jakieś możliwe przyczyny...?

Moja konfiguracja dla pasażera / nginx to:
    [19]}pracownicy Nginx: próbowałem od 1 do 10, zazwyczaj trzy.
  • Maksymalna wielkość puli pasażerów: 10 - 30 (tak, te liczby są dość wysokie)
  • [[19]}Passenger global queueing: wypróbowany zarówno w załączeniu, jak i w załączeniu.
  • NGinx GZip na: tak

Warto zauważyć, że zwiększyliśmy nginx max rozmiar ciała klienta do 200m, aby umożliwić przesyłanie dużych plików.

W każdym razie sugestie byłybynaprawdę docenione, podczas gdy kundle działają dobrze to zmienia sposób, w jaki robimy rzeczy dużo i naprawdę wolałbym korzystać z pasażera-poza tym, czy nie miało to ułatwić i lepiej działać?

Author: Matthew Savage, 2010-02-04

2 answers

Może rozmiar puli sql jest zbyt mały? Zasadniczo ogranicza to równoległość obciążeń bazodanowych w aplikacji, która z kolei zwiększa obciążenie, gdy tylko praca zostanie umieszczona na stosie aplikacji...

 18
Author: hurikhan77,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-04 20:38:32

Jako pierwszy krok chciałbym wdrożyć minimalną aplikację Rails typu" Hello World " w Twoim środowisku i zobaczyć, jaką przepustowość uzyskasz dzięki temu. Robi to przynajmniej powie Ci, czy twój problem jest ze środowiskiem lub gdzieś w aplikacji.

 2
Author: John Topley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-04 16:12:18