【发布时间】:2015-05-24 02:22:52
【问题描述】:
我遇到了一个 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
- gunicorn v19.3
- 小事件 v0.17
- psycopg2 v2.6
当与 Gunicorn 工作人员一起运行时,Django 是否无法跨 HTTP 请求重用连接?某种 3rd 方数据库连接池是我唯一的选择吗?
15-03-23 更新:CONN_MAX_AGE 和异步 Gunicorn 工作者似乎存在问题。如this post 所述,连接确实是持久的,但从未在任何顺序请求中重用。将CONN_MAX_AGE 设置为0 会强制Django 在请求结束时关闭连接,从而防止出现未使用的持久连接。
【问题讨论】:
标签: django postgresql psycopg2 gunicorn eventlet