Дроссель Сидекик рабочие места в рельсах - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно задушить мои задания в Sidekiq, чтобы я не получил эту ошибку:

2020-04-23T12:36:24.424Z pid=1 tid=osrlydn8x WARN: ActiveJob::DeserializationError: Error while trying to deserialize arguments: could not obtain a connection from the pool within 5.000 seconds (waited 5.000 seconds); all pooled connections were in use

По сути, я пытаюсь отправить много IP-адресов в Sidekiq, где каждый IP был бы своей собственной работой:

ip_array.each do |ip|
  ScanJob.perform_later(@scan, ip, ports)
end

ScanJob затем выполняет свою работу с каждым входящим IP-адресом, что может занять некоторое время, эффективно используя рабочий пул Sidekiq и один раз потребляя любые оставшиеся рабочие места. сбой, потому что все пулы подключений используются, как об ошибках.

Скажем, например, мне нужно запустить ScanJob для 50 адресов. Есть ли способ ограничить размер пула Sidekiq для запуска 5 за раз и поставить в очередь оставшиеся 45. Когда эти 5 будут выполнены, следующие 5 запустятся (осталось 40 заданий в очереди) и так далее?

1 Ответ

0 голосов
/ 23 апреля 2020

Попробуйте это: bundle exec sidekiq -c 5

...