Stack是Rails 3/Postgres + Mongrel。最近,我不得不增加连接池的大小,因为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应该自动关闭连接,但情况似乎并非如此。
我是否理解正确?我是否有漏洞?可能是什么原因导致了这种情况?