我使用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
方法设为空hz
值somaxconn
设置为1024(redis.conf中也为tcp-backlog
)以上都没有帮助我。什么可能导致性能损失?