环境:Ubuntu 20.04
内存泄漏在 Ruby 中常常是由 C 拓展程序 bug 导致的。内存碎片会造成内存呈对数增长。 它看起来像一个长长的曲线,会到达某个不可见的限制点。所有 Ruby 进程都有一些内存碎片问题。Ruby 管理内存方式必然会导致这个问题。尤其是 Ruby 不会在内存中移动对象。这样可能会破坏持有 Ruby 对象指针的 C 扩展程序。 碎片有时会造成 Ruby 占用超过它实际需要两倍的内存,有时还可能会是 4 倍之多!
解决方法:1. 调整环境变量 export MALLOC_ARENA_MAX=2
2. 使用jemalloc内存分配库,检查是否支持
ruby -r rbconfig -e “puts RbConfig::CONFIG[‘MAINLIBS’]”