想在ROR中判断我们是否有内存泄漏
Want to determine whether we have memory leak in ROR
在我们的项目中,我们是您的 sendgrid,用于发送电子邮件和用于队列目的的延迟作业,我将 ruby 升级到 2.7,rails 到 6.0.3.6,delayed_job_active_record 到 4.1。 6.升级后,我们注意到 aws 容器内存不足。想知道是不是因为内存泄漏。如果是因为内存泄漏,我需要使用什么探查器来确定内存泄漏?
调试这不是一件容易的事。我通常使用 rack-mini-profiler 来完成工作,这可以是简单的也可以是复杂的。
今年的 Rails Conf (2021) 中有一个非常有用的视频,名为 Profiling to make your Rails app faster - Gannon McGibbon,展示了如何使用 gem。
由于垃圾收集,ruby 将永远不会出现 C/C++ 中程序本应释放不再需要但实际上没有释放的内存的那种内存泄漏。
可能会发生内存失控,因为您持有不需要的引用。通常,当您将事物保存在 class 实例集合中,但由于不需要或旧事物而不剔除列表时,通常会发生这种情况。
另一件可能发生的事情是 ruby 内存管理和 OS 内存分配器之间的交互。有一篇非常好的文章,Hongli Lai 的 What causes Ruby memory bloat 就此进行了介绍。这可能是您无能为力的事情,因为它不是代码中的内存“泄漏”。
ruby2.7 中添加了一项功能,解决了赖红利文章中的问题。该方法是 GC.compact
,它不会自动调用,但会对 ruby 堆进行碎片整理。
在我们的项目中,我们是您的 sendgrid,用于发送电子邮件和用于队列目的的延迟作业,我将 ruby 升级到 2.7,rails 到 6.0.3.6,delayed_job_active_record 到 4.1。 6.升级后,我们注意到 aws 容器内存不足。想知道是不是因为内存泄漏。如果是因为内存泄漏,我需要使用什么探查器来确定内存泄漏?
调试这不是一件容易的事。我通常使用 rack-mini-profiler 来完成工作,这可以是简单的也可以是复杂的。
今年的 Rails Conf (2021) 中有一个非常有用的视频,名为 Profiling to make your Rails app faster - Gannon McGibbon,展示了如何使用 gem。
由于垃圾收集,ruby 将永远不会出现 C/C++ 中程序本应释放不再需要但实际上没有释放的内存的那种内存泄漏。
可能会发生内存失控,因为您持有不需要的引用。通常,当您将事物保存在 class 实例集合中,但由于不需要或旧事物而不剔除列表时,通常会发生这种情况。
另一件可能发生的事情是 ruby 内存管理和 OS 内存分配器之间的交互。有一篇非常好的文章,Hongli Lai 的 What causes Ruby memory bloat 就此进行了介绍。这可能是您无能为力的事情,因为它不是代码中的内存“泄漏”。
ruby2.7 中添加了一项功能,解决了赖红利文章中的问题。该方法是 GC.compact
,它不会自动调用,但会对 ruby 堆进行碎片整理。