Django CONN_MAX_AGE 与 PostgreSQL max_connections 的失败问题

3 投票
1 回答
1995 浏览
提问于 2025-04-18 15:40

因为我在我的Django服务器上设置了 CONN_MAX_AGE: 300,所以请求失败了,出现了错误,因为PostgreSQL的连接数超过了 max_connections 的限制(默认是100)。

解决这个问题的最佳策略是什么呢?我尝试过使用pgpool2,但这根本没有解决问题。现在连接被pgpool2排队了(让网站一直在等待,最后导致网关超时)。

我原本以为使用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。

1 个回答

0

我知道这已经是一年前的事了,但你当时是在用Gunicorn吗?这个请求解释了异步工作者不会重用连接,而你遇到的问题似乎通过切换到同步工作者解决了。

撰写回答