ruby-on-rails - 如何清除长时间运行的 rake 任务的内存以防止超出 Heroku 的内存配额?

标签 ruby-on-rails heroku memory-leaks out-of-memory rake-task

我有一个 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

关于ruby-on-rails - 如何清除长时间运行的 rake 任务的内存以防止超出 Heroku 的内存配额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503567/

相关文章:

ruby-on-rails - 如何检查对象是否具有时间值?

node.js - 部署到 Heroku 失败。移动文件与 Node 版本不兼容

heroku - 有没有一种方法可以使用 --bigkeys 等选项运行 heroku redis-cli?

c++ - Valgrind 在使用字符串类型成员时识别内存泄漏(使用 nvcc 编译)

java - libGDX 游戏在 Android 上崩溃,没有任何日志/错误

ruby-on-rails - 加速 sphinx ?

ruby-on-rails - 如何在 prawn pdf 生成 rails 中的单个表格单元格中对两个元素使用两种不同的样式?

ruby-on-rails - ruby - 重构 if else 语句

ruby-on-rails - Heroku 通过 cron 作业自动进行数据库备份

java - 在 Java 应用程序中使用的 OpenCV JNI 库中的内存使用跟踪工具