Sidekiq 文档 https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency says:
不要将并发设置高于 50。我见过稳定性问题
以并发数100为例
好吧,我的低内存消耗使我能够在单个 512MB X1 heroku dyno 上使用 350 个线程的并发性。我想使用 ~300,因为所有作业都是 IO 密集型(http 请求)。
我想知道我会遇到哪些问题?
我尝试用 80 来监控过载日志,但没有发现任何问题。
设置 300 个线程的并发时应该注意哪些问题?我是否会面临作业被终止而不被移至“死亡”队列的风险?或者只是我可以观看的工人终止。
将并发设置为 300 或 100 安全吗?
sidekiq 的所有者不知道答案,这是我打开的问题 https://github.com/mperham/sidekiq/issues/3211.
更新:
在高负载下,当我从 80 增加到 100 时,我开始到处出现“无法创建线程:资源暂时不可用”错误,在 180 个线程的极端情况下,有时会终止整个 sidekiq 进程。
根据 Heroku 指标,内存消耗始终在 140MB 到 240MB 之间。
I used TTIN信号 https://github.com/mperham/sidekiq/wiki/Signals#ttin正如所描述的here https://github.com/mperham/sidekiq/issues/2862
并发现大多数线程都在等待这些代码行:
app[worker.1]: 3 TID-ow5z46exw WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/monitor.rb:187:in `lock'
app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `initialize'
app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:95:in `join'
app[worker.1]: 3 TID-osjnd6zac WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/protocol.rb:158:in `wait_readable'
一切都记录在github中issue https://github.com/mperham/sidekiq/issues/3211
sidekiq 的所有者表示,痕迹看起来不错,因此无法找到稳定性问题的根本原因,但输入了有多少线程导致了该问题以及症状是什么。