Startup server awal yang lambat saat menggunakan Phusion Passenger and Rails

87

Untuk mengikuti kereta band Penumpang Phusion, kami telah menyiapkan server pementasan untuk aplikasi rel kecil untuk menguji semuanya.

Sejauh ini sangat bagus untuk digunakan, itu membuat pemasangan / konfigurasi dan penerapan aplikasi menjadi mudah. Masalahnya adalah situs yang kami gunakan tidak terlalu sering terkena dan tampaknya mematikan server di latar belakang. Artinya ketika seseorang pergi ke situs, mereka harus menunggu sangat lama sampai itu memulai server baru untuk menangani permintaan tersebut. Kami telah membaca dokumentasi, mencoba beberapa pengaturan yang berbeda (mode smart / smart-lv2, penumpangidletime dll) dan masih belum menemukan solusi yang sebenarnya.

Setelah menelusuri hasil Google, kami tidak dapat menemukan informasi yang berguna. Saat ini kami memiliki tugas cron yang membuat permintaan sesering mungkin dalam upaya agar server tetap berjalan.

Apakah ada orang lain yang mengalami masalah ini dan apakah Anda punya saran untuk memperbaikinya?

tsdbrown
sumber
Saya juga menemukan nugget ini di Situs Dokumen Penumpang: modrails.com/documentation/…
dewrich
@dewrich Saya menemukan alat ( wekkars.com ) yang melakukan persis apa yang dilakukan cronjob Anda
SteenhouwerD

Jawaban:

119

Apa yang terjadi adalah Aplikasi dan / atau ApplicationSpawners Anda ditutup karena batas waktu. Untuk memproses permintaan baru Anda, Penumpang harus memulai salinan baru dari aplikasi Anda, yang dapat memakan waktu beberapa detik, bahkan pada mesin yang cepat. Untuk memperbaiki masalah ini, ada beberapa opsi konfigurasi Apache yang dapat Anda gunakan untuk membuat Aplikasi Anda tetap hidup.

Inilah yang secara spesifik telah saya lakukan di server saya. PassengerSpawnMethod dan PassengerMaxPreloaderIdleTime adalah opsi konfigurasi yang paling penting dalam situasi Anda.

# 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

Dengan menggunakan mode pemijahan "pintar" dan mematikan PassengerMaxPreloaderIdleTime, Passenger akan menyimpan 1 salinan aplikasi Anda di memori setiap saat (setelah permintaan pertama setelah memulai Apache). ApplicationPendengar individu akan forkdiedit dari salinan ini, yang merupakan operasi yang sangat murah. Ini terjadi begitu cepat sehingga Anda tidak tahu apakah aplikasi Anda harus menelurkan pendengar atau tidak.

Jika aplikasi Anda tidak kompatibel dengan smart spawning, sebaiknya simpan PassengerPoolIdleTime yang besar dan buka situs Anda secara berkala menggunakan curl dan cronjob atau monit atau sesuatu untuk memastikan pendengar tetap hidup.

The Penumpang Panduan Pengguna adalah sebuah referensi awesome untuk ini dan banyak lagi opsi konfigurasi.

edit : Jika aplikasi Anda tidak kompatibel dengan pemijahan pintar, ada beberapa opsi baru yang sangat bagus

# 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

Jadi, jika Anda menggabungkan PassengerPreStart dan PassengerMinInstances, Passenger akan menjalankan 3 instans segera setelah apache dimuat, dan akan selalu menyimpan setidaknya 3 instans, sehingga pengguna Anda jarang (jika pernah) melihat penundaan.

Atau, jika Anda sudah menggunakan pemijahan pintar (disarankan) PassengerMaxPreloaderIdleTime 0, Anda dapat menambahkan PassengerPreStartuntuk mendapatkan manfaat tambahan dari segera memulai.

Terima kasih banyak kepada para pahlawan di phusion.nl !

John Douthat
sumber
Terimakasih banyak atas jawaban Anda. Saya yakin kami telah mencoba sebagian besar pengaturan tersebut tetapi mungkin tidak dalam kombinasi yang benar. Saya akan melakukan pengujian besok dan kembali.
tsdbrown
Ini luar biasa. Saya mengalami masalah yang sama dengan pemasangan Nginx / Phusion Passenger saya dan ini sangat membantu saya.
Scott Anderson
Saya sudah mencoba penyiapan ini dan tidak melihat peningkatan kinerja, tetapi aplikasi kami menggunakan RMagick. Apakah ada solusi untuk ini? Mengapa tidak berhasil dengan RMagick?
Chip Castle
1
RailsSpawnMethodtidak digunakan lagi dan mendukung PassengerSpawnMethod modrails.com/documentation/…
paulus
1
Hai, Saya mengalami masalah yang sama dan saya ingin mencoba konfigurasi itu, tetapi saya tidak tahu di mana konfigurasi itu harus ditempatkan. Terima kasih!
joseramonc
41

Hanya jika ada pengguna server nginx yang tersandung pada pertanyaan ini, arahan 'PassengerMaxRequests' dan 'PassengerStatThrottleRate' tidak diterjemahkan ke nginx. Namun yang lain melakukannya:

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_methodtidak digunakan lagi di penumpang 3 sebagai gantinya

passenger_spawn_method smart; 

segalanya baik-baik saja sampai saat ini.

Gav
sumber
7
Terima kasih untuk ini. Satu hal yang perlu diperhatikan adalah saya harus memasukkan penumpang_pool_idle_time di nginx.conf utama saya dengan pengaturan global lainnya, bukan hanya di konfigurasi situs tertentu tempat rel diaktifkan.
Scott Anderson
tapi kesalahan pada penumpang 4:"passenger_max_preloader_idle_time" directive is duplicate
TangMonk
2

KEMBALI:

# 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

Hanya sesuatu untuk ditambahkan dan mungkin berguna.

Metode spawn default dalam rilis saat ini adalah "smart-lv2", yang melewatkan spawner framework, jadi menyetel batas waktu spawner framework tidak akan berpengaruh kecuali Anda secara eksplisit menyetel metode spawn ke "smart".

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

Shuoling Liu
sumber
1

Jika host Anda adalah server bersama, seperti milik saya, Anda tidak dapat mengubah pengaturan dan terjebak dengan tugas cron.


sumber
Untuk aplikasi khusus ini, untungnya tidak. Tapi aku akan mengingatnya untuk masa depan, terima kasih.
tsdbrown
1

Saya juga mengalami masalah ini tetapi saya tidak dapat mengubah pengaturan penumpang karena saya tidak memiliki izin menulis ke file ini. Saya menemukan alat ( http://www.wekkars.com ) yang membuat aplikasi saya merespons dengan cepat. Mungkin ini juga bisa menjadi solusi untuk Anda.

SteenhouwerD
sumber
0

periksa versi penumpang. itu RailsSpawnMethod <string>untuk versi lama.

Jika demikian (jika saya ingat dengan benar), ganti Penumpang dengan Rel di semua arahan konfigurasi atau cari dokumen penumpang lama untuk lebih jelasnya

JmJ
sumber