我遇到了一个 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_AGE
为0
强制 Django 在请求结束时关闭连接,以防止出现未使用的持久连接。