Sidekiq çalışanları ile sorunlara koşuyorum.Rails bağlantı havuzu kullanımı nasıl hata ayıklanır?
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
Ben ActiveRecord::ConnectionTimeoutError
ve uygun genişlikte bağlantı havuzu kullanma hakkında öneriler takip ediyorum.
Bağlantı havuzunu yoruyor muyum? size
ve connections.length
oturumunu ActiveRecord::Base.connection_pool
'dan yapıyorum, ancak sabit bir boyutta kalıyorlar = 100 bağlantı.length = 5. Bu bir kaynak sızıntısı sorunu olmadığını gösteriyor.
MySQL sunucum 400 eşzamanlı bağlantıya izin verecek şekilde yapılandırıldı. o kaynak açlık veya kaçak olsun,
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
bu bunun ne teşhis etmek doğru yolu mu:
My Job bu gibi bakarak sona erdi? Bunun neden olduğunu anlamak için kullanabileceğim başka teknikler var mı?
'database.yml' dosyasında tanımlanan bağlantı havuzunun boyutu nedir? Kaç sidekiq çalışan iş parçacığı kullanıyorsunuz? – BoraMa
Havuz, connection_pool.size'de gösterildiği gibi, 25 işçi olarak 100 olarak tanımlanmıştır. – Joe