延迟作业不释放内存



我正在使用puma服务器和delayedjob。看来每项工作所做的记忆均未发布,我慢慢地得到了膨胀,导致我重新启动了我的dyno(Heroku)。

在作业执行之前,Dyno不会返回相同的内存使用图的任何原因?

有什么方法强制释放它?我尝试致电GC,但似乎没有帮助。

您可以遇到以下问题之一。或实际上都是所有:

编号1 。这不是实际问题,而是关于Ruby如何将内存发布到操作系统的误解。简短答案:不是。长答案:Ruby管理免费对象的内部列表。每当您的程序需要分配新对象时,它将从此免费列表中获取这些对象。如果那里没有其他对象,Ruby将通过操作系统分配新的内存。收集物体时,它们会返回免费列表。因此Ruby仍然具有分配的内存。为了更好地说明它,请想象您的程序通常使用100 MB。当某个时候程序将分配1 GB时,它将保存此内存直到重新启动。

有一些很好的资源可以在这里和这里了解更多信息。

您应该做的是增加对手的大小并随着时间的推移监视内存使用情况。它应该在某种程度上稳定。这将显示您的正常内存使用量。

编号2 。您可以有一个实际的内存泄漏。它可以在您的代码中或某种宝石中。查看此存储库,其中包含有关流行宝石中众所周知的内存泄漏和其他内存问题的信息。delayed_job实际上在那里列出。

编号3 。您可能使用的代码不优化,该代码使用的内存超过了所需的内存,因此您应该尝试调查内存使用情况并尝试减少它。如果您要处理大文件,也许您应该在较小的批处理等中进行。

最新更新