Powolne początkowe uruchamianie serwera podczas korzystania z Phusion Passenger i Rails

Aby wskoczyć na wagon pasażera Phusion, skonfigurowaliśmy serwer testowy dla małej aplikacji rails, aby przetestować wszystko.

Do tej pory był bardzo przyjemny w użyciu, sprawia, że instalowanie/konfigurowanie i wdrażanie aplikacji jest bardzo proste. Problem w tym, że strona, z której korzystamy, nie trafia zbyt często i wydaje się, że wyłącza serwery w tle. Oznacza to, że gdy ktoś idzie na stronę, musi naprawdę długo czekać, aż uruchomi nowy serwer, aby obsłużyć żądanie. Przeczytaliśmy dokumentacja, wypróbowała kilka różnych konfiguracji (tryby smart/smart - lv2, passengeridletime itp.) i nadal nie znalazła prawdziwego rozwiązania.

Po przejrzeniu wyników Google nie możemy naprawdę znaleźć przydatnych informacji. Obecnie mamy zadanie cron, które sprawia, że żądanie co-tak-często w celu utrzymania serwerów działa.

Czy ktoś jeszcze doświadcza tego problemu i ma jakąś radę co do rozwiązania?

Author: tsdbrown, 2009-05-12

7 answers

Dzieje się tak, że aplikacja i/lub ApplicationSpawners wyłączają się z powodu upływu czasu. Aby przetworzyć nowe żądanie, Pasażer musi uruchomić nową kopię aplikacji, co może potrwać kilka sekund, nawet na szybkiej maszynie. Aby rozwiązać ten problem, istnieje kilka opcji konfiguracji Apache, których możesz użyć, aby utrzymać swoją aplikację przy życiu.

Oto dokładnie to, co zrobiłem na moich serwerach. Pasażerskiepawnmethod i PassengerMaxPreloaderIdleTime są opcje konfiguracyjne najważniejsze w twojej sytuacji.
# Speeds up spawn time tremendously -- if your app is compatible. 
# RMagick seems to be incompatible with smart spawning
# Older versions of Passenger called this RailsSpawnMethod
PassengerSpawnMethod smart

# Keep the application instances alive longer. Default is 300 (seconds)
PassengerPoolIdleTime 1000

# Keep the spawners alive, which speeds up spawning a new Application
# listener after a period of inactivity at the expense of memory.
# Older versions of Passenger called this RailsAppSpawnerIdleTime
PassengerMaxPreloaderIdleTime 0

# Just in case you're leaking memory, restart a listener 
# after processing 5000 requests
PassengerMaxRequests 5000

Poprzez użycie trybu spawania "smart" i wyłączenie PassengerMaxPreloaderIdleTime, Passengerman będzie przechowywać 1 kopię aplikacji przez cały czas w pamięci (po pierwszym żądaniu po uruchomieniu Apache). Każdy Application słuchacz będzie forked z tej kopii, co jest super tanią operacją. Dzieje się tak szybko, że nie możesz stwierdzić, czy Twoja aplikacja musiała wyzwolić słuchacza.

Jeśli Twoja aplikacja jest polecam trzymanie dużego pasażera i okresowe uderzanie w Twoją witrynę za pomocą curla i cronjob lub monit lub coś takiego, aby zapewnić słuchaczowi pozostanie przy życiu.

Podręcznik Użytkownika dla pasażerów jest niesamowitym punktem odniesienia dla tych i innych opcji konfiguracji.

Edit : Jeśli Twoja aplikacja jest niezgodna ze Smart spawning, istnieją pewne nowe opcje , które są bardzo ładne

# Automatically hit your site when apache starts, so that you don't have to wait
# for the first request for passenger to "spin up" your application. This even
# helps when you have smart spawning enabled. 
PassengerPreStart http://myexample.com/
PassengerPreStart http://myexample2.com:3500/

# the minimum number of application instances that must be kept around whenever 
# the application is first accessed or after passenger cleans up idle instances
# With this option, 3 application instances will ALWAYS be available after the
# first request, even after passenger cleans up idle ones
PassengerMinInstances 3

Więc jeśli połączysz PassengerPreStart i PassengerMinInstances, Passenger uruchomi 3 instancje natychmiast po załadowaniu apache i zawsze utrzyma co najmniej 3 instancje w górze, więc użytkownicy rzadko (jeśli w ogóle) zobaczą opóźnienie.

Lub, jeśli używasz smart spawning (zalecane) z PassengerMaxPreloaderIdleTime 0 już, możesz dodać PassengerPreStart, aby uzyskać dodatkową korzyść natychmiastowego uruchomienia.

Wielkie podziękowania dla bohaterów w phusion.nl!

 114
Author: John Douthat,
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
2013-11-25 17:32:00

Tylko, że niektórzy użytkownicy serwera nginx natkną się na to pytanie, zarówno dyrektywy "PassengerMaxRequests", jak i "PassengerStatThrottleRate" nie tłumaczą się na nginx. Jednak inni tak robią:

rails_spawn_method smart;
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
passenger_pool_idle_time 1000;
HTH!

EDIT {[2] } jest przestarzały w pasażerze 3 zamiast tego użyj

passenger_spawn_method smart; 
Wszystko inne jest po prostu dobre do daty.
 38
Author: Gav,
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
2013-01-14 07:35:52

Możesz również użyć PassengerMinInstances:

Http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances

To może być połączone z PassengerPreStart

 4
Author: Josh,
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
2011-02-15 23:07:32

RE:

# Additionally keep a copy of the Rails framework in memory. If you're 
# using multiple apps on the same version of Rails, this will speed up
# the creation of new RailsAppSpawners. This isn't necessary if you're
# only running one or 2 applications, or if your applications use
# different versions of Rails.
RailsFrameworkSpawnerIdleTime 0

Tylko coś do dodania i może się przydać.

Domyślna metoda spawn w bieżącym wydaniu jest "smart-lv2" , który pomija Framework, więc ustawienie framework spawner timeout i tak nie będzie miał wpływu, chyba że jawnie Ustaw metodę spawn na "smart".

Źródło: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1{[9]

 2
Author: Shuoling Liu,
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
2009-05-13 07:25:25

Jeśli twój host jest współdzielonym serwerem, takim jak mój, nie możesz zmienić ustawień i utknąłeś z zadaniem cron.

 1
Author: ,
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
2009-05-12 21:04:12

Miałem również ten problem, ale nie mogłem zmienić ustawień pasażera, ponieważ nie miałem uprawnień do zapisu tego pliku. Znalazłem narzędzie ( http://www.wekkars.com ) dzięki czemu moja aplikacja szybko reaguje. Może to również może być rozwiązanie dla Ciebie.

 1
Author: SteenhouwerD,
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
2012-03-13 14:18:36

Sprawdź wersję pasażera. był to RailsSpawnMethod <string> dla starych wersji.

Jeśli tak (o ile dobrze pamiętam), wymień pasażera na szyny we wszystkich dyrektywach konfiguracyjnych lub poszukaj starych dokumentów pasażerskich po więcej szczegółów

 0
Author: JmJ,
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
2012-11-04 09:04:34