【发布时间】:2017-05-26 00:23:47
【问题描述】:
我正在使用 jquery DataTables、django 1.7 和 postgresql 开发一个页面。我设置了我的 DataTables 以从我的 django 后端检索信息(将 serverSide 选项设置为 true)。经过一些测试,我注意到我一直从 django 收到此错误
OperationalError: FATAL: sorry, too many clients already
在检查 pg_stat_activity 时,我已经达到了默认的 100 个连接。然后我检查了从 pg_stat_activity 检索到的行,我注意到有很多“IDLE”连接。根据我的阅读,空闲连接意味着请求已完成。这些应该已经被释放,但由于某种原因,它们没有被释放导致错误
我已经按照这个 SO 帖子中的建议检查了 CONN_MAX_AGE Django ORM leaves idle connections on Postgres DB
但我的 CONN_MAX_AGE 为零。我尝试将 db.close_old_connections() 放在我的数据表的 ajax 中引用的 fetch 视图中,但要么我没有正确使用它,要么因为连接没有关闭而无法正常工作
我对如何解决这个问题已经束手无策了,但我找不到任何其他与我相比类似的情况
谢谢
【问题讨论】:
-
很奇怪。您确定您没有手动打开连接(例如
from django.db import connection...cursor = connection.cursor())或类似的东西吗? -
@alfonso.kim 不。我一直在使用的唯一与 django.db 相关的东西是 Q 对象和 F 对象。
-
你不会在生产环境中使用 django 开发服务器吧?
-
@e4c5 不。在生产中,我们使用 uwsgi 和 nginx。我在开发过程中注意到了这一点,即通过 runserver 在我的本地 VM 中运行开发服务器。我找不到之前找到的堆栈溢出帖子,但它说如果设置有像 nginx 这样的反向代理,nginx 将管理连接并防止这种情况发生。此外,我读过的每一篇 SO 帖子或文章都说连接是由 django 自动关闭的,所以这个错误非常奇怪而且非常令人沮丧。
-
为什么不发布完整的堆栈跟踪
标签: python jquery django postgresql datatables