Django超过了Postgres的最大连接数

时间:2015-03-20 15:45:53

标签: django postgresql psycopg2 gunicorn eventlet

我遇到的问题是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

这些是已安装的软件包:

  • djano v1.7
  • gunicorn v19.3
  • eventlet v0.17
  • psycopg2 v2.6

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

更新15-03-23: CONN_MAX_AGE和异步Gunicorn工作人员似乎有问题。连接确实是持久的,但从未在this post中提到的任何顺序请求中重复使用。将CONN_MAX_AGE设置为0会强制Django在请求结束时关闭连接,从而防止未使用的持久连接形成。

1 个答案:

答案 0 :(得分:2)

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

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

相关问题