最近搭建一个rss feed管理的rails应用,在使用一段时间后内存差不多就占满,就是puma和sidekiq这两个进程占用。一种比较灵活的方式,使用像puma_worker_killer这样的监控程序,监控rails进程达到一定内存占用后将其重启,但这样使用体验不好。
由于ruby使用glibc的malloc进行内存分配,这是一个比较老旧的内存分配器,性能比较低分配时会产生大量碎片,所以切换jemalloc做为Ruby应用的内存分配器
# ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
#apt-get install libjemalloc-dev
#apt-get install libcurl4 libcurl4-openssl-dev
# rvm reinstall 2.6.3 -C –with-jemalloc