2011-07-06 17 views
15

मैं अपने उत्पादन सर्वर पर गेंडा के साथ एक नहीं बल्कि अजीब समस्या का सामना कर रहा हूँ ध्यान नहीं देता। हालांकि कॉन्फ़िग फ़ाइल राज्यों सच preload_app, गुरु की प्रक्रिया के लिए USR2 भेजने कोई प्रतिक्रिया उत्पन्न नहीं करता है, और यह की तरह गेंडा कुल मिलाकर संकेत अनदेखी कर रहा है लगता है। किसी अन्य सर्वर USR2 भेजने पर और (पुराने) राज्य के लिए मास्टर प्रक्रिया में परिवर्तन और एक नया मास्टर प्रक्रिया सफलतापूर्वक शुरू होता है। समस्याग्रस्त सर्वर RVM & बंडलर उपयोग कर रहा है, तो मैं यह सोचते हैं रहा हूँ यह किसी भी तरह से संबंधित है (एक दूसरे वेनिला गहरे लाल रंग का होता है)। यूएसआर 2 (QUIT, HUP) के अलावा सिग्नल भेजना ठीक काम करता है। क्या दृश्यों के पीछे क्या हो रहा है इसका पता लगाने का कोई तरीका है? यूनिकॉर्न की लॉग फ़ाइल पूरी तरह खाली है।यूनिकॉर्न पूरी तरह से USR2 संकेत

+0

आपको स्ट्रेस में रुचि हो सकती है। मुझे नहीं पता कि यह ओएसएक्स के लिए उपलब्ध है हालांकि यह आपको इसके निचले हिस्से तक पहुंचने में मदद करेगा। http://linux.die.net/man/1/strace –

उत्तर

0

मैं अपने VDS पर एक समान समस्या आई थी।

write(2, "E, [2011-07-23T04:40:27.240227 #19450] ERROR -- : Cannot allocate memory - fork(2) (Errno::ENOMEM) <...> 

कोशिश स्मृति आकार, मांग सीमा पर एक्सईएन स्मृति (वे बहुत कठिन मेरे मामले में थे) में वृद्धि, या हो सकता है, overcommit पर बारी बाद के माध्यम से कुछ गंभीर अवांछित पक्ष हो सकता है: Strace'ing कारण का पता चलता प्रभाव, तो इसे ध्यान से करें।

5

मैं एक ऐसी ही समस्या का सामना करना, लेकिन मेरे लॉग स्पष्ट रूप से समस्या का पता चला: भेजने USR2 शुरू में तैनाती पर काम करेगा, लेकिन जैसा कि तैनाती साफ हो गया, रिलीज कि यूनिकॉर्न मास्टर शुरू में शुरू किया गया था हटा दिया जाता है, इसलिए के प्रयास

काँटेदार बच्चे फिर से क्रियान्वित करने ... 53 /var/www/आवेदन/विज्ञप्ति/153565b36021c0b8c9cbab1cc373a9c5199073db/विक्रेता/बंडल/रूबी: एक USR2 संकेत भेजने बताते हुए त्रुटि लॉग के साथ, कुछ भी नहीं/असफल करने के लिए प्रकट होता /1.9.1/gems/unicorn-4.3.1/lib/unicorn/http_server.rb:439:in `कार्यकारी ': इस तरह के कोई फ़ाइल या निर्देशिका - /var/www/आवेदन/विज्ञप्ति/153565b36021c0b8c9cbab1 cc373a9c5199073db/विक्रेता/बंडल/गहरे लाल रंग का/1.9.1/bin/गेंडा (errno :: ENOENT)

यूनिकॉर्न दस्तावेजों http://unicorn.bogomips.org/Sandbox.html पर इस संभावित समस्या का उल्लेख: "पुराने संशोधन को साफ करने के संशोधन विशिष्ट प्रतिष्ठानों का कारण होगा यूनिकॉर्न गायब होने और विफल होने के लिए उन्नयन ", जो मेरे मामले में यूएसआर 2 'कुछ भी नहीं' के लिए दिखाई दिया।

मैं बावर्ची के आवेदन नुस्खा का उपयोग कर रहा है जो एक सांकेतिक रूप से लिंक vendor_bundle निर्देशिका कि तैनाती भर में साझा किया जाता है, अनुप्रयोगों को तैनात करने की है, लेकिन बुला bundle exec unicorn अभी भी मूल यूनिकॉर्न मास्टर एक रास्ता संदर्भ कि एक विशिष्ट रिहाई निर्देशिका शामिल पकड़े में हुई।

इसे ठीक करने के लिए मैं bundle exec /var/www/application/shared/vendor_bundle/ruby/1.9.1/bin/unicorn कॉल करने के लिए सुनिश्चित करने के लिए यूनिकॉर्न मास्टर एक द्विआधारी कि अगले करने के लिए एक तैनाती से मान्य होगा करने के लिए एक रास्ता था। एक बार ऐसा करने के बाद मैं दिल की सामग्री को तैनात कर सकता था, और kill -USR2 PID विज्ञापित के रूप में काम करेगा।

यूनिकॉर्न डॉक्स का उल्लेख आप मैन्युअल रूप से यूनिकॉर्न config फ़ाइल में निम्न स्थापित करने और HUP नया मास्टर कांटा करने के लिए एक USR2 भेजने से पहले यूनिकॉर्न फिर से लोड करने भेजकर द्विआधारी पथ संदर्भ बदल सकते हैं: Unicorn::HttpServer::START_CTX[0] = "/some/path/to/bin/unicorn"

शायद यह उपयोगी है इसी तरह की स्थितियों में कुछ लोगों के लिए, लेकिन मैंने इसे लागू नहीं किया क्योंकि ऐसा लगता है कि साझा यूनिकॉर्न बाइनरी के लिए एक पूर्ण पथ निर्दिष्ट करना पर्याप्त था।

10

मुझे संदेह है कि आपकी समस्या यह हो सकती है कि आपका जेमफ़ाइल बदल गया है, लेकिन आपने अपना यूनिकॉर्न इस तरह से शुरू नहीं किया है जो यूएसआर 2 को नए जेमफाइल का उपयोग करने की अनुमति देता है। इसलिए जब आप ऐप को पुनरारंभ करने का प्रयास करते हैं तो यह क्रैश हो रहा है।

असफल होने के विवरण के लिए अपने /log/unicorn.log देखें।

आप Capistrano का उपयोग कर रहे हैं, तो BUNDLE_GEMFILE सिमलिंक के रूप में, उदाहरण के लिए:

run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec unicorn -C#{config_path} -E #{unicorn_env} -D" 

Here's a PR कि इस demostrates निर्दिष्ट .:।

+0

मैं हमेशा इसे एक नए यूनिकॉर्न परिनियोजन पर भूल जाता हूं। 'before_exec {| सर्वर | ENV ["BUNDLE_GEMFILE"] = "# {app_path}/current/Gemfile"} ' – Adam

संबंधित मुद्दे