簡體   English   中英

如何清除長時間運行的 rake 任務的內存以防止超出 Heroku 的內存配額?

[英]How to clear memory for a long running rake task to prevent exceeding Heroku's memory quota?

我有一個 rake 任務,我需要在后台運行 Heroku 作為一次性任務。 然而,任務非常大,我遇到了“錯誤 R14(超出內存配額)”,希望我能得到一些關於如何避免這種情況的提示。

本質上,該任務查看 Products 表並查找沒有圖像Product.where(images: nil) 然后任務循環遍歷每個條目; 使用product.url它打開到遠程網站的連接(使用 Nokogiri)並提取圖像和一些附加數據。 使用 mini_magick 調整圖像大小並使用載波保存到 S3 Bucket。

我有大約 39000 條記錄需要處理,但是在大約 500 條記錄之后,我收到“超出內存配額”錯誤並且任務停止。

我可以理解為什么這是一項內存密集型任務,但我想知道是否有人可以指出我如何在處理和保存每條記錄后(甚至每 100 條記錄后)清理內存的正確方向.

或者/另外,有沒有辦法在 Heroku 任務自動終止后自動重啟它?

您是否遍歷每條記錄,您可以強制 GC 啟動:

Products.where(images: nil).each_with_index do |image, index|
  if index % 100 == 0
    GC.start
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM