【问题标题】:OperationalErrorFATAL: remaining connection slots are reserved for non-replication superuser connectionsOperationalError FATAL:剩余的连接槽保留给非复制超级用户连接
【发布时间】:2022-02-22 05:25:03
【问题描述】:

我已将我正在开发的 Django REST 框架 API 推送到 heroku,一切正常,然后突然之间,每当我调用我的端点时,我都会收到此错误:

/items/all_items 出现操作错误 连接到“ec2-3-230-149-158.compute-1.amazonaws.com”(3.230.149.158)上的服务器,端口 5432 失败:致命:剩余连接槽保留用于非复制超级用户连接

按照 heroku 的建议,我增加了 conn_max_age 的值。

知道为什么我会收到此错误,我该如何解决?

【问题讨论】:

  • 问题是连接数而不是他们的年龄。事实上,增加conn_max_age 可能会使事情变得更糟,因为它会使连接保持更长的时间,而不是它们需要的时间。某些进程正在与数据库建立大量连接。你需要找出那是什么并从那里处理。要么提高连接效率,要么增加允许的连接数。
  • 好的,阿德里安,谢谢。会努力的。
  • 快速@Adrian....知道如何检查哪个进程与我的数据库建立了很多连接吗?我正在使用 redis yp 缓存一些端点,这可能是原因吗?
  • Redis 是缓存到数据库还是内存中?查看正在建立连接的最佳方法是查看 Postgres 日志和/或pg_stat_activity view。如果您正在查看日志,那么让 log_connectionslog_disconnections 根据 What to log 启用会很有帮助
  • Redis 正在缓存到内存中。好的,谢谢,我试试看。

标签: postgresql heroku django-rest-framework heroku-postgres


【解决方案1】:

它告诉您在特定时间内您提出了太多请求。您应该看看如何将其他配置插入到您的连接池中,例如:

  • max_life_time(设置单个连接的最长生命周期。任何超过这个生命周期的连接都将被关闭)。
  • connect_timeout(设置尝试连接数据库的时间)。
  • max_connections(设置此池应保持的最大连接数。)

现在 Django 中的具体名称可能会有所不同,但它们应该非常相似。 有时仅 max_connections 是不够的,因为您的连接可能会饱和,因为它们在不使用时不会被关闭,如果您知道每个连接不应该存在一定的时间,那么 life_time 可能会有所帮助,因此您正在进行一些清洁出去。还有其他配置,例如:max_size、min_size、idle_timeout 等。您需要进行一些研究,以了解哪些内容可能更适合您的特定场景。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2012-08-04
    • 2020-04-26
    • 2023-04-09
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多