sidekiq Ruby 脚本后 Postgres 连接未关闭
Postgres connection not closing after sidekiq Ruby script
这是 Sidekiq 下的一个小 Ruby 脚本 运行ning。它打开与
的连接
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、Rails4.0.0、ruby2.1.1p76、sequel4.19.0、Ubuntu14.04.2 LTS.
您可以:
- 通过仅连接一次并在 Sidekiq 任务执行之间保持
db_connect
值来使用 Sequel 池
- 或者你每次都可以连接,但是你必须调用
disconnect
方法(http://sequel.jeremyevans.net/rdoc/classes/Sequel/Database.html#method-i-disconnect)手动断开连接。
我认为您当前方法的问题在于您通过调用 Sequel.connect
在每个 Sidekiq 任务执行时构建一个新的连接池,并且这些连接一直存在。它们可能需要很长时间才能真正被垃圾收集,如果有的话。
这是 Sidekiq 下的一个小 Ruby 脚本 运行ning。它打开与
的连接 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、Rails4.0.0、ruby2.1.1p76、sequel4.19.0、Ubuntu14.04.2 LTS.
您可以:
- 通过仅连接一次并在 Sidekiq 任务执行之间保持
db_connect
值来使用 Sequel 池 - 或者你每次都可以连接,但是你必须调用
disconnect
方法(http://sequel.jeremyevans.net/rdoc/classes/Sequel/Database.html#method-i-disconnect)手动断开连接。
我认为您当前方法的问题在于您通过调用 Sequel.connect
在每个 Sidekiq 任务执行时构建一个新的连接池,并且这些连接一直存在。它们可能需要很长时间才能真正被垃圾收集,如果有的话。