Django / Postgres:致命:剩余的连接槽是为非复制超级用户连接保留的

时间:2015-01-30 14:35:05

标签: python django postgresql heroku django-queryset

最近,我收到了关于连接插槽中出现的不足以及许多Heroku错误的错误:

H18 - Request Interrupted
H19 - Backend connection timeout
H13 - Connection closed without response
H12 - Request timeout

错误

django.db.utils.OperationalError in /

FATAL: remaining connection slots are reserved for non-replication superuser connections

当前应用程序设置:

  • Django 1.7.4
  • 的Postgres
  • Heroku(2x 2 dynos,Standard-2)5ms响应时间,13rpm吞吐量

对于Django应用程序中应该或不应该执行查询集的位置,或何时关闭数据库连接,是否存在一般的良好实践?

我之前从未遇到过此错误。我在heroku上增加了我的dynos并分配了更多的内存,我仍然遇到同样的问题。

我在Stack Overflow上发现了类似的问题,但我无法弄清楚究竟是什么原因引起了这个问题。

我在模型方法,视图,装饰器视图,上下文处理器中有查询集。

我的第一个倾向是在某处执行效率低下的查询集导致连接保持打开状态,最终导致应用程序崩溃,并且有足够多的人访问该网站。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

我意识到我在proc文件中使用了django服务器。我不小心评论出来并将它提交给heroku而不是使用gunicorn。一旦我在同一个heroku计划上切换到gunicorn,问题就解决了。

使用生产级别的应用程序服务器确实有很大的不同。当你容易出错时,也不要在一天的疯狂时刻编码。