syn*_*nic 23 postgresql django postgresql-9.3
我有一个 Django 设置,在 Ubuntu 14.04 LTS 上使用 Django 1.6.7 和 Postgres 9.3。
在任何给定时间,该站点大约有 250 个同时连接到 PostgreSQL 数据库,该数据库是 2.5GHz 的四核 Xeon E5-2670,具有 16GB 的内存。该特定机器上全天的平均负载约为 20 到 30。
有时,我会在哨兵中收到有关数据库连接超时的电子邮件,我认为启用某种连接池将有助于缓解此问题,并稍微降低数据库的负载。
由于我们使用的是 Django 1.6,因此我们可以使用内置池。但是,当我将 CONN_MAX_AGE 设置为 10 秒或 60 秒时,同时连接的数量几乎立即跳到允许的最大设置(大约是我们通常看到的两倍),并且连接开始被拒绝。
所以,出现什么都原因,连接ARE坚持,但他们不被重用。
这可能是什么原因?
附注。我们还使用带有 --worker-class=eventlet 的 gunicorn。也许这就是我们痛苦的根源?
syn*_*nic 24
做了一些更多的实验,我发现我们问题的原因确实是 gunicorn 的 eventlet 工人类。每个微线程都建立了自己的持久连接,并且根本无法重用它们中的任何一个。
禁用 eventlet 使我们的网络服务器上的负载上升(但幅度不大),但 postgres 负载现在下降到平均 3。从 30。
归档时间: |
|
查看次数: |
10310 次 |
最近记录: |