我正在使用Sidekiq来处理工作。我正在使用Heroku基本计划,最多允许40个连接。我的理解是每个线程最多可以有1个连接。 Sidekiq的默认线程数为25.在我看来,我永远不会超过25个连接。
但是我的redis连接错误太多了。这怎么可能?我应该减少Sidekiq工人的数量吗?或者我还能做些什么吗?我目前有这样的Procfile:
worker: bundle exec sidekiq
将它切换到此修复它吗?
worker: bundle exec sidekiq -c 10
Sidekiq是否有可能没有正确关闭连接?此外,当我得到这个"太多的连接"错误,它基本上打倒了网站 - 有没有办法让它如果失败优雅,它似乎应该做。
答案 0 :(得分:0)
简短的回答是,heroku没有准确显示任何调试绊倒的连接数。自从Redis有很多工作以来,我非常喜欢把它弄清楚。
我的超时设置为零(通过> heroku redis:info
确定),这基本上意味着连接无限期地保持打开状态(仪表板没有准确地显示这一点,说我真的像35那样使用10) 。
通过heroku redis连接到redis:cli然后运行>CLIENT LIST
显示了许多连接/客户端可能处于TIME_WAIT状态的问题。
更改超时修复此问题:
heroku redis:timeout --seconds 60
老实说,将其称为连接池是一个很大的不准确之处。