gpt4 book ai didi

Django 超出最大 Postgres 连接数

转载 作者:行者123 更新时间:2023-11-29 11:36:07 25 4
gpt4 key购买 nike

我在使用异步 eventlet worker 运行 Gunicorn 时遇到 Django 应用程序超过 Postgres 最大同时连接数 (100) 的问题。当达到连接限制时,应用程序开始返回 500 错误,直到可以建立新连接为止。

这是我的数据库配置:

DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'django',
'USER': 'django',
'HOST': 'postgres',
'PORT': 5432,
'CONN_MAX_AGE': 60,
}
}

这就是 Gunicorn 的启动方式:

gunicorn --bind 0.0.0.0:8080 --worker-class eventlet --workers 5 myapp.wsgi:application

这些是已安装的包:

  • djano v1.7
  • gunicorn v19.3
  • eventlet v0.17
  • psycopg2 v2.6

在与 Gunicorn worker 一起运行时,Django 是否无法重用跨 HTTP 请求的连接?某种第 3 方数据库连接池是我唯一的选择吗?

15-03-23 更新:CONN_MAX_AGE 和异步 Gunicorn worker 似乎有问题。连接确实是持久的,但从未在任何顺序请求中重复使用,如 this post 中所述.将 CONN_MAX_AGE 设置为 0 会强制 Django 在请求结束时关闭连接,以防止形成未使用的持久连接。

最佳答案

Django 没有数据库连接池。看看 PgBouncer。它是一个轻量级连接池,易于设置和配置:https://wiki.postgresql.org/wiki/PgBouncer

简而言之:您的 django 应用程序连接到 PgBouncer,它有一个到 Postgres 的连接池,它可以重用,因此永远不会超过最大连接限制。

关于Django 超出最大 Postgres 连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29170542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com