这是一个在 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)
数据库位于本地主机上,因此没有其他任何东西正在创建这些连接。
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
方法(http://sequel.jeremyevans.net/rdoc/classes/Sequel/Database.html#method-i-disconnect)手动断开连接。
我认为您当前方法的问题在于您通过调用 Sequel.connect
在每个 Sidekiq 任务执行时构建一个新的连接池,并且这些连接一直存在。它们可能需要很长时间才能真正被垃圾收集(如果有的话)。
关于ruby-on-rails - sidekiq Ruby 脚本后 Postgres 连接未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268605/