Django使用PostgreSQL数据库时的CONN_MAX_AGE故障与max_connections问题

3

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

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

我期望使用pgpool会减少发送到PostgreSQL的空闲连接数量,而不是再次引起相同的问题。

以下是我使用的设置:

pgpool2:

num_init_children = 32 #需要这么多工作进程吗? max_pool = 10 #默认值为4

postgres:

max_connections = 400 #升级自默认值100

uWSGI / Django:

  • 所有工作进程都有20个线程。
  • 总共有10个工作进程,包括所有站点。

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


你解决了这个问题吗,@veboor?我也遇到了一个非常类似的问题。 - Hans Kristian
不,我选择了pgbouncer,你也可以使用django-postgrespool。PgBouncer需要在userlist.txt文件中添加用户,但这已经不是问题了,因为我让部署脚本为每个站点执行了该操作。 - vdboor
1个回答

0

我知道这已经是一年前的事了,但你当时使用的是Gunicorn吗?这个拉取请求解释说异步工作线程不会重复使用连接,而你曾经/正在遇到的问题似乎通过切换为同步工作线程得以解决。


感谢指出这个问题。我已经使用 Gunicorn 一段时间了,但转换到了 uWSGI。如果我没记错的话,我那时候已经在使用 uWSGI 了。 - vdboor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接