如何解决想判断我们在ROR中是否有内存泄漏
在我们的项目中,我们是您发送电子邮件和延迟作业以用于队列目的的 sendgrid,我将 ruby 升级到 2.7,rails 到 6.0.3.6,delay_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++ 中发生的那种内存泄漏,程序应该释放它不再需要但没有的内存。
可能发生的情况是内存失控,因为您保留了不需要的引用。通常,当您将内容保存在类实例集合中,但不会因为不需要或旧的内容而剔除列表时,就会发生这种情况。
另一件可能发生的事情是 ruby 内存管理和操作系统内存分配器之间的交互。有一篇非常好的文章,What causes Ruby memory bloat 由 Hongli Lai 撰写。这可能是您无能为力的事情,因为它不是代码中的内存“泄漏”。
在 ruby 2.7 中添加了一项功能,解决了 Hongli Lai 文章中的问题。该方法是 GC.compact
,它不会自动调用,但会对 ruby 堆进行碎片整理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。