Phusion Passenger and Rails kullanılırken yavaş ilk sunucu başlangıcı


87

Phusion Passenger'ın ana vagonuna atlamak için, işleri test etmek için küçük bir ray uygulaması için bir hazırlık sunucusu kurduk.

Şimdiye kadar kullanımı çok güzeldi, uygulamaları kurmayı / yapılandırmayı ve dağıtmayı çocuk oyuncağı haline getiriyor. Sorun şu ki, kullandığımız site çok sık vurulmuyor ve arka planda sunucuları kapatıyor gibi görünüyor. Birisi siteye gittiğinde, isteği yerine getirmek için yeni bir sunucu başlatana kadar gerçekten uzun süre bekledikleri anlamına gelir. Belgeleri okuduk, birkaç farklı kurulum denedik (akıllı / akıllı-lv2 modları, yolcu zamanı vb.) Ve hala gerçek bir çözüm bulamadık.

Google sonuçlarını gözden geçirdikten sonra gerçekten yararlı bilgiler bulamıyoruz. Şu anda, sunucuları çalışır durumda tutmak için sık sık istekte bulunan bir cron işimiz var.

Bu sorunu yaşayan başka biri var mı ve bir düzeltme için herhangi bir tavsiyeniz var mı?



Ben bir araç (bulunamadı @dewrich wekkars.com sizin cronjob yaptıklarına tam yapar)
SteenhouwerD

Yanıtlar:


119

Olan şey, Uygulamanız ve / veya ApplicationSpawners'ınız zaman aşımı nedeniyle kapatılıyor. Yeni talebinizi işlemek için Passenger, uygulamanızın hızlı bir makinede bile birkaç saniye sürebilen yeni bir kopyasını başlatmalıdır. Sorunu çözmek için, Uygulamanızı canlı tutmak için kullanabileceğiniz birkaç Apache yapılandırma seçeneği vardır.

İşte özellikle sunucularımda yaptığım şey. PassengerSpawnMethod ve PassengerMaxPreloaderIdleTime, sizin durumunuzda en önemli yapılandırma seçenekleridir.

# 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

"Akıllı" yumurtlama modunu kullanarak ve PassengerMaxPreloaderIdleTime'ı kapatarak Passenger, uygulamanızın 1 kopyasını her zaman bellekte tutacaktır (Apache'yi başlattıktan sonraki ilk istekten sonra). Bireysel Applicationdinleyiciler, forksüper ucuz bir işlem olan bu kopyadan alınacaktır . O kadar hızlı gerçekleşir ki, uygulamanızın bir dinleyici oluşturması gerekip gerekmediğini söyleyemezsiniz.

Uygulamanız akıllı yumurtlama ile uyumsuzsa, dinleyicinin hayatta kalmasını sağlamak için büyük bir PassengerPoolIdleTime tutmanızı ve sitenizi periyodik olarak curl ve cronjob veya monit veya başka bir şey kullanarak vurmanızı öneririm.

Yolcu Kullanım Kılavuzu bu ve daha fazla yapılandırma seçenekleri için müthiş bir referanstır.

düzenleme : Uygulamanız akıllı yumurtlama ile uyumlu değilse , çok güzel bazı yeni seçenekler var

# 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

Dolayısıyla, PassengerPreStart ve PassengerMinInstitution'ı birleştirirseniz, Passenger apache yüklendikten hemen sonra 3 örneği döndürür ve her zaman en az 3 örneği açık tutar, böylece kullanıcılarınız nadiren (varsa) bir gecikme görür.

Veya akıllı yumurtlamayı (önerilen) PassengerMaxPreloaderIdleTime 0zaten kullanıyorsanız, PassengerPreStartanında başlatmanın ek avantajlarından yararlanmak için ekleyebilirsiniz .

Phusion.nl'deki kahramanlara çok teşekkürler !


Cevabınız için çok teşekkür ederim. Bu ayarların çoğunu denediğimize inanıyorum, ancak belki de doğru kombinasyonda değil. Yarın teste gireceğim ve geri döneceğim.
tsdbrown

Bu harika. Nginx / Phusion Passenger kurulumumla aynı sorunu yaşıyordum ve bu bana çok yardımcı oldu.
Scott Anderson

Bu kurulumu denedim ve performans iyileştirmesi görmedim, ancak uygulamamız RMagick kullanıyor. Bunun için herhangi bir geçici çözüm var mı? RMagick ile neden çalışmıyor?
Chip Castle

1
RailsSpawnMethodPassengerSpawnMethod modrails.com/documentation/…
paulus

1
Merhaba, aynı sorunu yaşıyorum ve bu yapılandırmayı denemek istiyorum, ancak bu yapılandırmanın nereye yerleştirilmesi gerektiğini bilmiyorum. Teşekkürler!
joseramonc

41

Sadece bu soruya tökezleyen herhangi bir nginx sunucusu kullanıcısı varsa, hem 'PassengerMaxRequests' hem de 'PassengerStatThrottleRate' yönergeleri nginx'e çevrilmez. Ancak diğerleri şunları yapar:

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

HTH!

EDIT rails_spawn_method, 3. yolcu için kullanımdan kaldırıldı, bunun yerine şunu kullanın:

passenger_spawn_method smart; 

diğer her şey tarihe kadar iyi.


7
Bunun için teşekkürler. Unutulmaması gereken bir şey, ana nginx.conf'umdaki yolcu_pool_idle_time'ı, rayların etkinleştirildiği belirli site yapılandırması yerine diğer genel ayarlarla doldurmam gerektiğidir.
Scott Anderson

ancak yolcu 4'te hata:"passenger_max_preloader_idle_time" directive is duplicate
TangMonk


2

YENİDEN:

# 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

Sadece eklenecek bir şey ve faydalı olabilir.

Mevcut sürümdeki varsayılan spawn yöntemi, çerçeve oluşturucuyu atlayan "smart-lv2" dir, bu nedenle, spawn yöntemini açıkça "akıllı" olarak ayarlamadığınız sürece, çerçeve oluşturucu zaman aşımını ayarlamanın bir etkisi olmaz.

Kaynak: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1


1

Ana makineniz benimki gibi paylaşılan bir sunucuysa, ayarları değiştiremezsiniz ve bir cron işi ile sıkışıp kalırsınız.


Bu özel uygulama için neyse ki öyle değil. Ama gelecek için bunu aklımda tutacağım teşekkürler.
tsdbrown

1

Ben de bu sorunu yaşadım ancak bu dosyaya yazma iznim olmadığı için yolcu ayarlarını değiştiremedim. Uygulamamın hızlı yanıt vermesini sağlayan bir araç ( http://www.wekkars.com ) buldum . Belki bu sizin için de bir çözüm olabilir.


0

yolcu versiyonunu kontrol edin. <string>eski sürümler için RailsSpawnMethod idi .

Eğer öyleyse (doğru hatırlıyorsam), tüm yapılandırma yönergelerinde Yolcu yerine Rails yazın veya daha fazla ayrıntı için eski yolcu belgelerine bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.