Ruby on rails sidekiq Ruby脚本后Postgres连接未关闭

Ruby on rails sidekiq Ruby脚本后Postgres连接未关闭,ruby-on-rails,ruby,postgresql,sidekiq,Ruby On Rails,Ruby,Postgresql,Sidekiq,这是一个在Sidekiq下运行的小Ruby脚本。它打开了与的连接 db_connect = Sequel.connect(@db_credential, search_path: @namespace) 它从不明确关闭连接;我认为这是不必要的 脚本已运行多次且全部完成后,Sidekiq web面板显示没有正在运行或排队的任务,Postgres显示60个Sidekiq连接: postgres=# select count(*) from pg_stat_activity where ap

这是一个在Sidekiq下运行的小Ruby脚本。它打开了与的连接

    db_connect = Sequel.connect(@db_credential, search_path: @namespace)
它从不明确关闭连接;我认为这是不必要的

脚本已运行多次且全部完成后,Sidekiq web面板显示没有正在运行或排队的任务,Postgres显示60个Sidekiq连接:

postgres=# select count(*) from pg_stat_activity where application_name like '%sidekiq%';
 count 
-------
    60
(1 row)
数据库位于localhost上,因此没有其他东西在创建这些连接

psql 9.3.6、Sidekiq 3.3.3、Rails 4.0.0、ruby 2.1.1p76、sequel 4.19.0、Ubuntu 14.04.2 LTS。您可以:

  • 通过只连接一次并在Sidekiq任务执行之间保持
    db_connect
    值来使用Sequel池
  • 或者,您可以每次连接,但必须通过调用
    disconnect
    方法()手动断开连接

我相信您当前方法的问题在于,通过调用
Sequel.connect
,您正在每个Sidekiq任务执行上构建一个新的连接池,而这些连接一直存在。可能需要很长时间才能对它们进行垃圾收集(如果有的话)。

而且通过将
max\u connections:10
或其他内容传递到
connect
方法来限制连接池大小也是有意义的。