TERM को फँसाने और QUIT भेजने के बाद हरोकू पर यूनिकॉर्न एक्ज़िट टाइमआउट


90

मैं गेंडा और साइडकीक चलाने वाले हरोकू ऐप के लिए R12 एक्जिट टाइमआउट त्रुटियां प्राप्त कर रहा हूं। ये त्रुटियां दिन में 1-2 बार होती हैं और जब भी मैं तैनात करता हूं। मैं समझता हूं कि मुझे सही ढंग से प्रतिक्रिया देने के लिए हरिकू से शटडाउन संकेतों को बदलने की आवश्यकता है, लेकिन यह सोचा कि मैंने नीचे गेंडा विन्यास में ऐसा किया है:

worker_processes 3
timeout 30
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts "Unicorn master intercepting TERM and sending myself QUIT instead. My PID is #{Process.pid}"
    Process.kill 'QUIT', Process.pid
  end

  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
    Rails.logger.info('Disconnected from ActiveRecord')
  end
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts "Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT. My PID is #{Process.pid}"
  end

  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end

  Sidekiq.configure_client do |config|
    config.redis = { :size => 1 }
  end
end

त्रुटि के आसपास मेरे लॉग इस तरह दिखते हैं:

Stopping all processes with SIGTERM
Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT. My PID is 7
Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT. My PID is 11
Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT. My PID is 15
Unicorn master intercepting TERM and sending myself QUIT instead. My PID is 2
Started GET "/manage"
reaped #<Process::Status: pid 11 exit 0> worker=1
reaped #<Process::Status: pid 7 exit 0> worker=0
reaped #<Process::Status: pid 15 exit 0> worker=2
master complete
Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
Stopping remaining processes with SIGKILL
Process exited with status 137

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

FWIW, मैं हेरोकू के शून्य डाउनटाइम तैनाती प्लगइन ( https://devcenter.heroku.com/articles/labs-preboot/ ) का उपयोग कर रहा हूं ।


6
यदि यह मदद करता है, तो मैं शून्य डाउनटाइम तैनाती प्लगइन के बिना भी इस समस्या का सामना कर रहा हूं । मुझे आशा है कि कोई व्यक्ति आपकी मदद कर सकता है या यदि आप इसका पता लगाते हैं तो आप उत्तर दे सकते हैं। शायद हरोकू समर्थन से संपर्क करें?
क्रिस पीटर्स

क्रिस की तरह, मैं शून्य डाउनटाइम का उपयोग नहीं कर रहा हूं, और इस मुद्दे का अनुभव कर रहा हूं। यह हेरोकू के अनुशंसित गेंडा विन्यास का उपयोग करने के बावजूद है।
imderek

हेरोकू के अनुशंसित कॉन्फिग का उपयोग करने के बावजूद मुझे वही समस्या हो रही है। कोई शून्य-डाउनटाइम परिनियोजित नहीं है।
elsurudo

यहाँ एक ही समस्या है, और प्रीबूट प्लगइन का उपयोग नहीं करना।
एड्रियन मैकनील

एक बात मैंने गौर की है कि यह USUALLY वर्कर डायनोस पर होता है। हमेशा नहीं, लेकिन आमतौर पर।
क्रिस पीटर्स

जवाबों:


4

मुझे लगता है कि आपके कस्टम सिग्नल को संभालना यहाँ के टाइमआउट का कारण है।

संपादित करें: मैं हेरोकू के दस्तावेज से असहमत होने के लिए अपमानित हो रहा हूं और मैं इसे संबोधित करना चाहूंगा।

TERM सिग्नल को पकड़ने और निगलने के लिए आपके यूनिकॉर्न एप्लिकेशन को कॉन्फ़िगर करना आपके एप्लिकेशन हैंग होने और सही तरीके से बंद न होने का सबसे संभावित कारण है।

हरोकू का तर्क है कि एक TIT सिग्नल को QUIT सिग्नल में बदलना और बदलना एक कठिन शटडाउन को एक ग्रेसफुल शटडाउन में बदलने का सही व्यवहार है।

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


2
हरोकू प्रलेखन में अभी भी " SIGTERM के साथ ग्रेसफुल शटडाउन " शामिल है , और मुझे देवदार स्टैक पर ऐसा करने की आवश्यकता नहीं है। क्या आपके पास इसका संदर्भ है जहां यह पाया जा सकता है?
डेनिस

मुझे इस उत्तर का समर्थन करने वाला कोई भी दस्तावेज नहीं मिला। यूनिकॉर्न और हरोकू के दस्तावेज दोनों के अनुसार, यूनिकॉर्न अभी भी पोसिक्स सिग्नल की व्याख्या के विपरीत का उपयोग करता है।
जोश कोवाच

यह सच नहीं है। यूनिकॉर्न अभी भी स्पष्ट रूप से टीईआरएम सिग्नल की स्पष्ट हैंडलिंग के बिना बंद नहीं करता है। इसका समर्थन करने वाला देव केंद्र लेख यहां पाया जा सकता है: devcenter.heroku.com/articles/rails-unicorn#config
तिरछी

मेरा मानना ​​है कि हरोकू डॉक्स का कहना है कि आपको इन संकेतों को पकड़ने / बदलने की कोशिश करनी चाहिए। इनायत बंद करने के प्रयास शटडाउन टाइमआउट के लिए सबसे संभावित मूल कारण हैं।
विनफील्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.