7

我遇到了一个 Django 应用程序的问题,该应用程序在Gunicorn与异步eventlet工作人员一起运行时超过了与 Postgres 的最大同时连接数 (100)。当达到连接限制时,应用程序开始返回500-errors,直到可以建立新连接。

这是我的数据库配置:

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
  • 独角兽 v19.3
  • 小事件 v0.17
  • psycopg2 v2.6

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

更新 15-03-23:异步 Gunicorn 工作人员似乎存在问题CONN_MAX_AGE如本文所述,连接确实是持久的,但从未在任何顺序请求中重用。设置CONN_MAX_AGE0强制 Django 在请求结束时关闭连接,以防止出现未使用的持久连接。

4

1 回答 1

2

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

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

于 2015-03-20T16:38:43.277 回答