मैं साइडकीक श्रमिकों के साथ मुद्दों में भाग रहा हूं।रेल कनेक्शन पूल उपयोग को डीबग कैसे करें?
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
मैं ActiveRecord::ConnectionTimeoutError
और एक उपयुक्त बड़े कनेक्शन पूल का उपयोग कर के बारे में सिफारिशों के बाद कर रहा हूँ।
मैं यह जानना चाहता हूं कि मैं कनेक्शन पूल को समाप्त कर रहा हूं या नहीं। मैं size
और connections.length
ActiveRecord::Base.connection_pool
से लॉगिंग कर रहा हूं, लेकिन वे निरंतर आकार = 100 कनेक्शन। Length = 5. पर रहते हैं जो बताता है कि यह संसाधन रिसाव मुद्दा नहीं है।
मेरा MySQL सर्वर 400 समवर्ती कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किया गया है।
मेरे नौकरी इस तरह देख समाप्त हो गया:
class MyJob < ActiveJob::Base
queue_as :default
rescue_from StandardError do |exception|
# clear connections on exception. Not sure if this is a good idea or not.
ActiveRecord::Base.clear_active_connections!
end
def perform()
logger.info "size"
logger.info ActiveRecord::Base.connection_pool.instance_eval { @size }
logger.info "connections"
logger.info ActiveRecord::Base.connection_pool.instance_eval { @connections }.length
# Ensure connections come from connection pool.
ActiveRecord::Base.connection_pool.with_connection do |conn|
# do stuff
end
end
end
इस यह क्या पैदा निदान करने के लिए सही रास्ता नहीं है, चाहे वह संसाधन भुखमरी या रिसाव है? क्या ऐसी अन्य तकनीकें हैं जिनका उपयोग मैं यह करने के लिए कर सकता हूं कि यह क्यों हो रहा है?
आपके 'Database.yml' में परिभाषित कनेक्शन पूल का आकार क्या है? आप कितने साइडकीक वर्कर थ्रेड का उपयोग करते हैं? – BoraMa
पूल को 100 के रूप में परिभाषित किया गया है, जैसा कि कनेक्शन_पूल.size, 25 श्रमिकों में दिखाया गया है। – Joe