我正在使用一个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 在请求结束时关闭连接,防止未使用的持久连接滞留。