私はSidekqの労働者の問題にぶつかっています。Rails接続プールの使用方法をデバッグするには?
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 connections.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'で定義されている接続プールのサイズはどれくらいですか?いくつのsidekiqワーカースレッドを使用しますか? – BoraMa
プールは、connection_pool.size、25人の作業者に示すように、100として定義されています。 – Joe