फ़्यूज़न पैसेंजर और रेल का उपयोग करते समय प्रारंभिक सर्वर स्टार्टअप को धीमा करें


87

फ़्यूज़न पैसेंजर के बैंड-वैगन पर कूदने के लिए हमने चीजों के परीक्षण के लिए एक छोटी सी रेल एप्लिकेशन के लिए एक स्टेजिंग सर्वर सेटअप किया है।

अब तक इसका उपयोग करना बहुत अच्छा रहा है, यह एप्लिकेशन को एक हवा में स्थापित / कॉन्फ़िगर और तैनात करता है। समस्या यह है कि हम जिस साइट का उपयोग कर रहे हैं वह बहुत बार हिट नहीं होती है और यह पृष्ठभूमि में सर्वर को बंद करने के लिए लगता है। जब कोई व्यक्ति साइट पर जाता है तो उसके पास अनुरोध को संभालने के लिए एक नया सर्वर शुरू होने तक वास्तव में लंबा इंतजार होता है। हमने दस्तावेज़ीकरण के माध्यम से पढ़ा है, कुछ अलग सेट-अप (स्मार्ट / स्मार्ट-एलवी 2 मोड, पैसेंजरडाईलेट आदि) की कोशिश की और अभी भी एक वास्तविक समाधान नहीं मिला है।

Google परिणामों के माध्यम से जुताई के बाद हम वास्तव में उपयोगी जानकारी नहीं पा सकते हैं। वर्तमान में हमारे पास एक क्रॉन जॉब है जो सर्वरों को चालू रखने के प्रयास में हर बार अनुरोध करता है।

क्या कोई और इस समस्या का सामना कर रहा है और क्या आपके पास इसे ठीक करने के लिए कोई सलाह है?


मुझे पैसेंजर डॉक साइट पर यह डली भी मिली: modrails.com/documentation/…
dewrich

@dewrich मुझे एक टूल ( wekkars.com ) मिला, जो आपके क्रोनजोब को ठीक-ठीक करता है
SteenhouwerD

जवाबों:


119

जो हो रहा है वह यह है कि आपके एप्लिकेशन और / या एप्लिकेशनस्पीवर्स समय-आउट के कारण बंद हो रहे हैं। आपके नए अनुरोध को संसाधित करने के लिए, पैसेंजर को आपके एप्लिकेशन की एक नई प्रति स्टार्टअप करनी होगी, जो कि तेज मशीन पर भी कई सेकंड ले सकती है। समस्या को ठीक करने के लिए, कुछ अपाचे कॉन्फ़िगरेशन विकल्प हैं जिनका उपयोग आप अपने एप्लिकेशन को जीवित रखने के लिए कर सकते हैं।

यहाँ विशेष रूप से मैंने अपने सर्वर पर क्या किया है। आपकी स्थिति में सबसे अधिक महत्वपूर्ण कॉन्फ़िगरेशन विकल्प पैसेंजरस्पेन मैथोड और पैसेंजरमैक्सप्रोएडरइल्डटाइम हैं।

# 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

"स्मार्ट" स्पॉनिंग मोड का उपयोग करके और पैसेंजरमैक्सपैरलोडरइल्डटाइम को बंद करके, यात्री हर समय आपके आवेदन की 1 प्रति मेमोरी में रखेगा (अपाचे शुरू करने के बाद पहले अनुरोध के बाद)। व्यक्तिगत Applicationश्रोताओं को forkइस प्रति से एड किया जाएगा , जो एक सुपर-सस्ता ऑपरेशन है। यह इतनी जल्दी होता है कि आप यह नहीं बता सकते हैं कि आपके आवेदन को किसी श्रोता को स्पॉन करना है या नहीं।

यदि आपका ऐप स्मार्ट स्पैनिंग के साथ असंगत है, तो मैं सुझाव दूंगा कि एक बड़े पैसेंजरपूलइडलिफ्ट को रखें और अपनी साइट को समय-समय पर कर्ल और क्रोनजॉब या मोनेट या किसी चीज़ का उपयोग करते हुए सुनें ताकि यह सुनिश्चित हो सके कि श्रोता जीवित रहे।

पैसेंजर उपयोगकर्ता गाइड इन और अधिक कॉन्फ़िगरेशन विकल्प के लिए एक भयानक संदर्भ है।

संपादित करें : यदि आपका ऐप स्मार्ट स्पैनिंग के साथ असंगत है, तो कुछ नए विकल्प हैं जो बहुत अच्छे हैं

# 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

इसलिए, यदि आप पैसेंजरप्रेस्टार्ट और पैसेंजरमइनस्टांस को जोड़ते हैं, तो यात्री अपाचे लोड के तुरंत बाद 3 उदाहरणों को स्पिन करेगा, और हमेशा कम से कम 3 इंस्टेंसेस को रखेगा, इसलिए आपके उपयोगकर्ता शायद ही कभी (कभी भी) देरी देखेंगे।

या, यदि आप PassengerMaxPreloaderIdleTime 0पहले से ही स्मार्ट स्पॉनिंग (अनुशंसित) का उपयोग कर रहे हैं, तो आप PassengerPreStartतत्काल स्टार्टअप का अतिरिक्त लाभ प्राप्त करने के लिए जोड़ सकते हैं ।

Phusion.nl पर नायकों के लिए बहुत धन्यवाद !


उत्तर देने के लिए आपका धन्यवाद। मेरा मानना ​​है कि हमने उन सेटिंग में से अधिकांश की कोशिश की है, लेकिन शायद सही संयोजन में नहीं। मैं कल परीक्षण करवाऊंगा और वापस लौटूंगा।
tsdbrown

यह कमाल का है। मैं अपने Nginx / फ़्यूज़न पैसेंजर स्थापित करने के साथ एक ही समस्या थी और इससे मुझे काफी मदद मिली।
स्कॉट एंडरसन

मैंने इस सेटअप की कोशिश की है और प्रदर्शन में कोई सुधार नहीं हुआ है, लेकिन हमारा ऐप RMagick का उपयोग कर रहा है। क्या इसके लिए कोई वर्कअराउंड हैं? यह RMagick के साथ काम क्यों नहीं करता है?
चिप कैसल

1
RailsSpawnMethodPassengerSpawnMethod modrails.com/documentation/… के
paulus

1
नमस्ते, मैं एक ही मुद्दा रहा हूँ और मैं उस विन्यास की कोशिश करना चाहता हूँ, लेकिन मुझे नहीं पता कि उस कॉन्फ़िगरेशन को कहाँ रखा जाना चाहिए। धन्यवाद!
जोसेरामोनक

41

बस इस सवाल पर कोई भी nginx सर्वर उपयोगकर्ता लड़खड़ा रहा है, दोनों '' पैसेंजरमैक्सRequests 'और' पैसेंजरस्टैटट्रॉटलरेट 'निर्देश nginx में अनुवाद नहीं करते हैं। हालांकि अन्य करते हैं:

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 में पदावनत किया गया है

passenger_spawn_method smart; 

बाकी सब आज तक अच्छा है।


7
इसके लिए धन्यवाद। ध्यान देने वाली एक बात यह है कि मुझे अपने मुख्य nginx.conf में यात्री_पुल_डेल_टाइम को अन्य वैश्विक सेटिंग्स के साथ केवल विशिष्ट साइट कॉन्फिगर करने में सक्षम करना था, जहां रेल सक्षम थी।
स्कॉट एंडरसन

लेकिन यात्री 4 पर त्रुटि:"passenger_max_preloader_idle_time" directive is duplicate
TangMonk

4

आप पैसेंजरइनइनस्टैंट्स का भी उपयोग कर सकते हैं:

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

इसे पैसेंजरप्रेस्टार्ट के साथ जोड़ा जा सकता है


डॉक्स से: "आपको इस विकल्प को गैर-शून्य मान पर सेट करना चाहिए, यदि आप किसी विस्तारित अवधि के लिए वेबसाइट के निष्क्रिय होने के बाद संभावित रूप से लंबे स्टार्टअप समय से बचना चाहते हैं।" ओपी के प्रश्न के लिए सही उत्तर की तरह लगता है।
चक

2

उत्तर:

# 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

बस कुछ जोड़ने के लिए और उपयोगी हो सकता है।

वर्तमान रिलीज़ में डिफ़ॉल्ट स्पॉन विधि "स्मार्ट-एलवी 2" है, जो फ्रेमवर्क स्पावर को बंद कर देती है, इसलिए फ्रेमवर्क स्पानर टाइमआउट सेट करने से वैसे भी प्रभाव नहीं पड़ेगा जब तक कि आप स्पॉन विधि को "स्मार्ट" पर स्पष्ट रूप से सेट न करें।

स्रोत: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1


1

यदि आपका होस्ट एक साझा सर्वर है, तो मेरी तरह, आप सेटिंग्स को नहीं बदल सकते हैं और क्रोन जॉब के साथ फंस गए हैं।


इस विशेष आवेदन के लिए शुक्र है कि यह नहीं है। लेकिन मैं भविष्य के धन्यवाद के लिए इसे ध्यान में रखूंगा।
tsdbrown

1

मुझे यह समस्या भी थी लेकिन मैं यात्री सेटिंग्स को बदलने में सक्षम नहीं था क्योंकि मुझे इस फाइल की कोई लिखित अनुमति नहीं थी। मुझे एक टूल ( http://www.wekkars.com ) मिला, जो मेरे ऐप को तेजी से प्रतिक्रिया दे रहा है। हो सकता है कि यह आपके लिए भी एक समाधान हो।


0

यात्री के संस्करण की जाँच करें। यह <string>पुराने संस्करणों के लिए RailsSpawnMethod था ।

यदि ऐसा है (यदि मुझे सही तरीके से याद है), तो सभी कॉन्फ़िगरेशन निर्देशों में पटरियों के साथ पैसेंजर को बदलें या अधिक विवरण के लिए पुराने यात्री डॉक्स देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.