我尝试使用2X工作人员dyno,等待不会出现R14错误,但结果是这样:
2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Process running mem=1047M(102.3%)
2013-06-04T13:03:30.723260+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
但是,工作人员的任务已成功完成。
问题:
提前致谢
答案 0 :(得分:5)
我终于找到了解决方案。问题在于rmagick。它获得了它看到的所有内存。如果你使用2X工作人员dyno而不是1X工作人员dyno并不重要。它增长到最大可用资源。所以,we have to set a limit。但就我而言,并非所有限制都有效。
您可以通过这种方式直接进行系统调用:
convert -limit memory 0 -limit map 0 list_of_input_files output_file
这样,您可以避免使用内存缓存,直接转到磁盘缓存。 这是我发现在heroku中避免R14错误的唯一方法。对于-limit memory 32 -limit map 64
或类似的其他组合,它总是给我错误。我接受了from here的想法。
当然,您总是可以使用rmagick library这一行,但它对我不起作用,我确实使用了之前解释过的系统调用方法:
Magick.limit_resource(:memory, 0)
Magick.limit_resource(:map, 0)
更新:我使用nice
命令确保更高优先级。它似乎有所改善,但最终我得到R14错误,但它确实不常见(即使使用相同的文件!)。
答案 1 :(得分:0)
派对有点晚了,但就我而言,垃圾收集者是我的救星。只需在每份工作后运行GC.start
。