【问题标题】:Django CONN_MAX_AGE failures with postgresql max_connectionsDjango CONN_MAX_AGE 使用 postgresql max_connections 失败
【发布时间】:2014-08-01 17:45:55
【问题描述】:

由于我在 Django 服务器上使用 CONN_MAX_AGE: 300,请求失败并出现错误,因为 PostgreSQL 超出了 max_connections 限制(默认为 100)。

解决这个问题的最佳策略是什么?我试过使用 pgpool2,但这根本没有解决问题。现在连接由 pgpool 2 排队(让站点永远等待,最终导致网关超时)。

我预计使用 pgpool 会减少进入 PostgreSQL 的空闲连接数,不会再次导致同样的问题。

这些是我使用的设置:

pgpool2:

num_init_children = 32 # are so many workers needed? max_pool = 10 # default is 4

postgres:

max_connections = 400 # upgraded from default 100

uWSGI/Django:

  • 所有工作线程都有 20 个线程。
  • 所有站点加起来总共有 10 名工人。

VPS 是一个 8 核 Linode,频率为 2.27GHz,内存为 2GB。

【问题讨论】:

  • 你有没有解决过这个@veboor?我面临着一个非常相似的问题。
  • 不,我选择了 pgbouncer,你也可以使用 django-postgrespool。 PgBouncer 要求将用户添加到 userlist.txt 文件中,但这不再是问题,因为我让部署脚本为每个站点执行该操作。

标签: python django postgresql connection-pooling pgpool


【解决方案1】:

我知道这是一年前的事了,但你用的是 Gunicorn 吗? This pull request 解释说异步工作器不会重用连接,而您曾经/现在遇到的问题似乎可以通过切换到同步工作器来解决。

【讨论】:

  • 感谢您指出该问题。我在 Gunicorn 上已经有一段时间了,但切换到了 uWSGI。 IIRC 我当时已经在使用 uWSGI。
猜你喜欢
  • 2017-01-25
  • 2015-12-16
  • 2012-06-10
  • 2020-07-21
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 2021-06-08
  • 2021-11-19
相关资源
最近更新 更多