我的项目遇到内存泄漏,在部署后,它的内存在10分钟内从500 MB增加到1800 MB。
我尝试了许多工具,但是没有一个易于使用。
我用过JProfiler,它显示了调用栈,内存分配,哪些类/方法被称为太多……以图表的形式,非常易于阅读和分析。我真的很喜欢
并这样:
我已经找到了此工具:https://github.com/tenderlove/heap-analyzer,但是我没有使用过。
那么,有什么好的方法/工具来查找ruby / rails内存泄漏吗?
我尝试了mini_profiler,但无法正常工作。
非常感谢!
答案 0 :(得分:5)
您还可以尝试使用这些工具来广泛地分析应用程序。
您还需要专注于 GC 和 jemalloc 内存管理。
答案 1 :(得分:3)
技术就像:
为自己制作一个最小的可重复示例,该示例发生泄漏,因此您可以在开发机器上进行复制(以下步骤也适用于生产,但不建议这样做)。
泄漏可能不会很大,您只需要确定它正在发生即可。服务器也必须在单个进程模式下运行(否则,您可能会从可能尚未泄漏的其他进程中无用地转储。)
l1 = [cat_A, cat_B, cat_C, cat_D], l2= [dog_A, dog_B, dog_C, dog_D]
),GET /do_dump
请注意,这是一项繁重的操作,会产生巨大的文件
require 'objspace'
ObjectSpace.dump_all(output: File.open('dump.json', 'w'))
次的操作几年前,我通过为红宝石1.9.2编写heap_dump宝石(实际上与GC.start
非常相似)解决了类似的问题,它与现代红宝石不兼容,但具有通用提示自述文件中的所有内容均适用。
此外,内存碎片可能存在问题,您可以尝试使用由ObjectSpace.dump_all
构建的ruby。但是通常这些仅在更长的运行时间后才会显示
PS。以防万一-确保您的代码中没有jemalloc
答案 2 :(得分:2)