什么限制了工人的表现?

时间:2015-09-29 23:56:27

标签: ruby ubuntu redis sidekiq foreman

我使用Sidekiq进行工作处理。使用Foreman,我在Procfile中设置了六个进程:

redirects: bundle exec sidekiq -c 10 -q redirects
redirects2: bundle exec sidekiq -c 10 -q redirects
redirects3: bundle exec sidekiq -c 10 -q redirects
redirects4: bundle exec sidekiq -c 10 -q redirects
redirects5: bundle exec sidekiq -c 10 -q redirects
redirects6: bundle exec sidekiq -c 10 -q redirects

这些进程每秒执行大约1600多个作业(简单的工作以在Redis中增加一些哈希),大多数时间所有10个线程都忙。我将数字海洋液滴从8核扩展到12核,性能降至每秒400左右。对于每个进程,10个中只有3-5个忙线。

我尝试解决此问题:

  • perform方法设为空
  • 使用更少/更多的流程计数
  • 使用更少/更多并发
  • 将队列拆分为特定于服务器的队列(来自其他服务器的三个express.js客户端将作业放入队列中)
  • 尝试使用redis.conf中的不同hz
  • somaxconn设置为1024(redis.conf中也为tcp-backlog
  • 关闭RDB保存并仅使用AOF
  • 刷新所有Redis dbs(所有逻辑都有两个数据库:一个用于sidekiq,另一个用于我的工作者中的哈希)
  • 从没有Foreman的终端运行sidekiq(检查是否是Foreman问题)

以上都没有帮助我。什么可能导致性能损失?

0 个答案:

没有答案