【问题标题】:heroku redis connection issues using sidekiq使用sidekiq的heroku redis连接问题
【发布时间】:2015-09-25 05:08:39
【问题描述】:

我正在使用 Sidekiq 处理作业。我正在使用最多允许 40 个连接的 Heroku 基本计划。我的理解是每个线程最多可以有1个连接。 Sidekiq 的默认线程数为 25。在我看来,我永远不会获得超过 25 个连接。

但是我收到了太多的 redis 连接错误。这怎么可能?我应该减少 Sidekiq 工人的数量吗?或者还有什么我可以做的吗?我目前有这样的 Procfile:

worker: bundle exec sidekiq

将其切换到此修复它吗?

worker: bundle exec sidekiq -c 10

Sidekiq 是否有可能没有正确关闭连接?此外,当我收到这个“连接太多”错误时,它基本上会导致网站瘫痪 - 有没有办法让如果它看起来应该做的优雅失败。

【问题讨论】:

  • 是的,-c 10 这样做是合理的,并且会有所帮助。
  • thx @MikePerham,Sidekiq 有什么办法可以创建比它的处理器使用限制更多的连接?我想这是我的困惑。
  • 当然,如果您以某种方式启动自己的线程。例如Timeout 模块将静默启动线程。

标签: heroku sidekiq


【解决方案1】:

简短的回答是,heroku 没有准确地显示连接数,这会导致调试失败。由于 Redis 已经非常有效,因此我非常业余地弄清楚它。

我的超时设置为零(通过 >heroku redis:info 确定),这基本上意味着连接无限期地保持打开状态(仪表板没有准确地显示这一点,说我使用的是 10,而实际上有 35 个)。

通过 heroku redis:cli 连接到 redis,然后运行 ​​>CLIENT LIST 显示有许多连接/客户端可能处于类似 TIME_WAIT 状态的问题。

更改超时解决了这个问题:

heroku redis:timeout --seconds 60 

老实说,将其称为连接池是非常不准确的。

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2020-01-19
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多