My Rails 4.1 sidekiq应用程序遇到了与postgresql没有关闭的活动记录连接的问题。
由于没有关闭连接,postgres没有释放内存,一段时间后我的postgres服务器上的内存不足(我有15GB的内存和一个相当小的数据库)。
另一个问题是,经过一段时间后,我的sidekiq工作人员开始服用大约10倍的工作时间,经过一段时间后,工人们就会陷入困境并停止处理任何新工作。
我已尝试在下面包装我的工作人员代码,但不影响:
def with_connection(&block)
ActiveRecord::Base.connection_pool.with_connection do
yield block
end
ensure
ActiveRecord::Base.clear_active_connections!
ActiveRecord::Base.connection.close
end
我还在after_fork方法
中的unicorn.rb文件中添加了这个if defined?(ActiveRecord::Base)
config = ActiveRecord::Base.configurations[Rails.env] || Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = 10 # seconds
ActiveRecord::Base.establish_connection(config)
end
我能做些什么来让这些连接关闭,或者至少释放postgres内存?