Django:CONN_MAX_AGE持续连接,但不会在PostgreSQL中重复使用它们

我有一个Django的设置是在Ubuntu 14.04 LTS上使用Django 1.6.7和Postgres 9.3。

在任何时候,该站点都可以同时连接大约250个PostgreSQL数据库,该数据库是2.5GHz的四核至强E5-2670处理器,并具有16GB的内存。 特定机器的全天平均负载约为20到30。

偶尔我会收到有关连接超时到数据库的哨兵电子邮件,并且我认为启用某种连接池可以帮助缓解这个问题,并且稍微降低数据库的负载。

由于我们使用的是Django 1.6,所以我们可以使用内置的池。 但是,当我将CONN_MAX_AGE设置为10秒或60秒时,几乎立即同时连接的数量跳转到最大允许设置(这是我们通常看到的大约两倍),并且连接开始被拒绝。

所以,出于什么原因,连接持续的,但是它们被重用。

这可能是什么原因?

PS。 我们也使用gunicorn和–worker-class = eventlet。 也许这是我们的灾难的来源?

做了一些更多的实验,我发现我们问题的原因实际上就是有枪手的小辈工人阶级。 每一个微线程都是自己的持久连接,没有办法重用任何一个线程。

禁用eventlet已经使我们的web服务器上的负载(但不是太多),但postgres负载现在下降到平均3。