Django超出了Postgres的最大连接数限制。

10

我正在使用一个Django应用程序时遇到了一个问题,当使用异步的eventlet工作进程通过Gunicorn运行时,它超出了与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 工作器运行时,Django 是否不能跨 HTTP 请求重用连接?我是否只能选择某种第三方数据库连接池?

更新 15-03-23: 在使用异步 Gunicorn 工作器时,CONN_MAX_AGE 存在问题。正如此帖子中所述,连接确实是持久的,但从未在任何连续请求中重复使用。将 CONN_MAX_AGE 设置为 0 可以强制 Django 在请求结束时关闭连接,防止未使用的持久连接滞留。

1个回答

3
Django没有数据库连接池。请看一下PgBouncer,这是一个轻量级的连接池,易于设置和配置:https://wiki.postgresql.org/wiki/PgBouncer 简而言之:你的Django应用程序连接到PgBouncer,并拥有连接到Postgres的连接池,因此不会超过最大连接限制。

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