Sidekiq документация говорит:
Не устанавливайте параллелизм выше 50. Например, я видел проблемы со стабильностью при параллелизме 100.
Что ж, мое низкое потребление памяти позволяет мне использовать параллелизм 350 потоков на одном 512 МБ X1 heroku dyno. И я хотел бы использовать ~ 300, потому что все задания требуют интенсивного ввода-вывода (http-запросы).
Интересно, с какими проблемами я могу столкнуться?
Я пытался отслеживать журналы при перегрузке с 80 и не видел проблем.
Каких проблем следует ожидать при настройке параллелизма 300 потоков? Буду ли я рисковать тем, что задания будут прекращены без перемещения в «мертвую» очередь? ИЛИ просто прекращение работы рабочих, которые я смогу наблюдать. Безопасно ли устанавливать параллелизм 300 или 100?
Владелец sidekiq не знает ответа, и вот проблема, которую я открыл.
ОБНОВЛЕНИЕ: при высокой нагрузке, когда я увеличился с 80 до 100, я начал получать ошибки «не могу создать поток: ресурс временно недоступен» здесь и там, в крайних случаях 180 потоков он когда-нибудь завершит весь процесс sidekiq.
Потребление памяти всегда составляло от 140 МБ до 240 МБ в соответствии с показателями Heroku.
Я использовал сигнал TTIN, как описано здесь
И обнаружил, что большинство потоков ожидают этих строк кода:
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'
Все задокументировано в issue на github.
Владелец sidekiq говорит, что трассировки выглядят нормально, поэтому не удалось определить основную причину проблемы со стабильностью, но есть данные о том, сколько потоков вызывает это и каковы симптомы.