Sidekiq没有关闭postgresql连接

时间:2015-04-08 19:47:52

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 sidekiq

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内存?

0 个答案:

没有答案