Потребление памяти внутри sidekiq worker

  1. Может ли загрузка нескольких Models в sidekiq worker вызвать утечку памяти? Собирает ли он мусор?

Например:

class Worker
  include Sidekiq::Worker

  def perform
    Model.find_each do |item|

    end
  end
end
  1. Может ли использование ActiveRecord::Base.connection внутри рабочего процесса вызвать проблемы? Или это соединение автоматически закрывается?

person Zilvinas    schedule 12.05.2016    source источник
comment
Стоит прочитать (от автора Sidekiq)~: mikeperham.com/2015/ 14/10/optimizing-sidekiq .. также возможная копия stackoverflow.com/questions/18978396/   -  person Damien Roche    schedule 12.05.2016
comment
проверьте здесь stackoverflow.com/a/34462164/3011280   -  person Oshan Wisumperuma    schedule 13.03.2019


Ответы (1)


Я думаю, вы столкнулись с проблемой, которая была и у меня с «рабочим» — фактическая проблема заключалась в коде, а не в Sidekiq в любом случае, форме или форме.

В моем проблемном коде я просто бездумно загрузил кучу моделей с помощью большого, толстого, жадного запроса (сотни тысяч экземпляров).

Я довольно просто исправил свой рабочий/код. В моем случае я перевел свой вызов БД с all на использование find_in_batches с меньшим количеством объектов, извлеченных для пакета.

Model.find_in_batches(100) do |record| 
# ... I like find_in_batches better than find_each because you can use lower numbers for the batch size
# ... other programming stuff 

Как только я это сделал, задание, которое через некоторое время привело бы к остановке Sidekiq (нехватка памяти на коробке), выполнялось с find_in_batches в течение 5 месяцев, и мне даже не пришлось перезапускать Sidekiq ... Хорошо, возможно, я перезапустил Sidekiq. некоторые за последние 5 месяцев, когда я развернул или сделал техническое обслуживание :), но не из-за работника!

person craig.kaminsky    schedule 12.05.2016
comment
ОП уже использует find_each, что в основном то же самое, что и find_in_batches(1000) { |batch| batch.each ... - person spickermann; 12.05.2016
comment
Извините, да. Я отредактирую свой пост ... Мне больше нравится find_in_batches, потому что вы можете контролировать размер пакета (по сравнению с find_each, который захватывает значение по умолчанию 1000). - person craig.kaminsky; 12.05.2016