![](/img/trans.png)
[英]How to find out which rake task in Heroku scheduler is resulting in a R14 (Memory quota exceeded)
[英]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.