我需要对我的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工人的 "池子",一旦消耗,任何剩余的Job都会失败 因为所有的池子连接都在使用中,就像错误所说的那样。
比如说,我需要针对50个地址运行ScanJob。 有没有办法限制Sidekiq池的大小,一次运行5个,然后把剩下的45个排队。 当这5个完成后,再运行下一个5个(剩余40个排队作业),以此类推?
试试这个。bundle exec sidekiq -c 5