繁体   English   中英

Rails 3 DB连接池 - 连接未关闭

[英]Rails 3 DB connection pool - connections not closing

Stack是Rails 3 / Postgres + mongrel。 我最近不得不增加连接池,因为其中一个杂种上的命中总是超时。 我推断,每个运行3个mongrels +一个delayed_job,我需要池中的6个连接(它被设置为5)。 我在database.yml中将此值增加到10并且它解决了超时问题,现在虽然当我监视PG中的连接时我看到了这种情况;

SELECT datname,usename,procpid,client_addr,waiting,query_start,current_query FROM pg_stat_activity;


db1   | www-data |    8658 |             | f       | 2014-03-19 10:03:54.084825+00 | <IDLE>
db1   | www-data |    9071 |             | f       | 2014-03-19 09:58:42.306558+00 | <IDLE>
db1   | www-data |    8721 |             | f       | 2014-03-19 10:03:53.980691+00 | <IDLE>
db1   | www-data |    8722 |             | f       | 2014-03-19 10:03:53.874443+00 | <IDLE>
db1   | www-data |    8733 |             | f       | 2014-03-19 10:04:20.380137+00 | <IDLE>
db1   | www-data |    9080 |             | f       | 2014-03-19 10:00:54.157541+00 | <IDLE>
db1   | www-data |   10843 |             | f       | 2014-03-19 10:04:18.506355+00 | <IDLE>
#and so on and so on for more than 20 instances...

它会导致超过20个连接,并且似乎没有关闭它们(我假设存在仍然意味着它们是开放的,只是没有做任何事情)。 它看起来似乎上下,所以一些连接正在关闭。

我认为rails / activerecord应该自动关闭它的连接,但事实并非如此。

我读过这个吗? 我在某个地方有泄漏吗? 可能是什么原因造成的?

在控制器发起的操作之外使用ActiveRecord事务时,例如在延迟的作业中,必须使用以下语法确保将连接返回到池中

ActiveRecord::Base.connection_pool.with_connection do
  #your code here
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM