【问题标题】:Django 1.7, postgresql, jquery datatables, and connections not being releasedDjango 1.7、postgresql、jquery 数据表和连接未发布
【发布时间】: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


【解决方案1】:

我发现了这个问题,它在我之前发出的一个信号中,它在每个请求之后运行。该信号中发生了会话变量的更新。由于此信号在每个请求(包括 ajax 请求)之后运行,我认为会话变量保存发生死锁导致错误。我已将代码更改为更具体地说明信号的效果何时生效并且错误已得到修复。感谢@ec45 和@alfonso.kim 提供的指导

【讨论】:

    猜你喜欢
    • 2020-01-01
    • 2014-12-04
    • 2018-02-09
    • 2016-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多