我遇到的问题是Django应用程序在使用异步Gunicorn
工作程序运行eventlet
时超过了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
这些是已安装的软件包:
与Gunicorn工作人员一起运行时,Django无法在HTTP请求中重用连接吗?某种第三方数据库连接池是我唯一的选择吗?
更新15-03-23: CONN_MAX_AGE
和异步Gunicorn工作人员似乎有问题。连接确实是持久的,但从未在this post中提到的任何顺序请求中重复使用。将CONN_MAX_AGE
设置为0
会强制Django在请求结束时关闭连接,从而防止未使用的持久连接形成。
答案 0 :(得分:2)
Django没有数据库连接池。看看PgBouncer。它是一个轻量级的连接池,易于设置和配置:https://wiki.postgresql.org/wiki/PgBouncer
简而言之:您的django应用程序连接到PgBouncer并且它有一个与Postgres连接的池,它会重复使用,因此永远不会超出最大连接限制。