RubyonRails——想确定ror中是否存在内存泄漏吗

t1qtbnec  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(282)

在我们的项目中,我们是您的sendgrid,用于发送电子邮件和延迟作业以用于队列,我将ruby升级到2.7,rails升级到6.0.3.6,延迟作业记录升级到4.1.6。升级后,我们注意到aws容器内存不足。想知道是不是因为内存泄漏。如果是因为内存泄漏,我需要使用什么探查器来确定内存泄漏?

huus2vyu

huus2vyu1#

由于垃圾收集,ruby将永远不会出现c/c中出现的那种内存泄漏,在c/c中,程序本应释放不再需要但不需要的内存。
可能发生的情况是内存失控,因为您保留了不需要的引用。通常,当您将内容保留在类示例集合中,但由于内容不需要或陈旧而不剔除列表时,会发生这种情况。
另一个可能发生的事情是ruby内存管理和os内存分配器之间的交互。有一篇很好的文章,是什么导致了ruby内存膨胀,作者是赖洪丽。这可能是您可以做得很少的事情,因为它不是代码中的内存“泄漏”。
ruby 2.7中添加了一个特性,解决了lai hongli文章中的问题。方法是 GC.compact 它不会自动调用,但会对ruby堆进行碎片整理。

mtb9vblg

mtb9vblg2#

调试这项任务并不容易。我通常使用rack mini profiler来完成这项工作,它可以是简单的,也可以是复杂的。
今年的rails conf(2021)中有一个非常有用的视频,名为profiling,让你的rails应用程序更快——gannon mcgibbon,它展示了如何使用这个gem。

相关问题