如何使用rvm在现有的rails服务器中添加jemalloc?

5
如何在一个正在工作的 Ruby on Rails 服务器中添加 jemalloc?我们使用 rvm 安装了 Ruby。
Rails 版本:5.2 Ruby 版本:2.5.1
我尝试过:
ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"

我获得的输出结果为

-lpthread -lgmp -ldl -lcrypt -lm

我看到一篇文章使用Jemalloc减少Rails应用的内存使用,但它使用了rbenv。

2个回答

6

我成功地添加了jemalloc,以下是我的步骤:

使用您的发行版的包管理器(apt、pacman、brew等)安装Jemalloc库:

# For instance, on Ubuntu:
sudo apt install libjemalloc-dev

使用编译标志重新安装当前安装的Ruby版本,以包含Jemalloc支持:

rvm reinstall 2.6.6 -C --with-jemalloc

旧版的Ruby使用编译标志语法-with-jemalloc(只有一个短线),但从Ruby 2.6开始使用--with-jemalloc(双短线)。

然后检查Jemalloc支持是否已经正确添加:

# For ruby >= 2.6:
ruby -r rbconfig -e "puts RbConfig::CONFIG['MAINLIBS']"
# For ruby < 2.6:
ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"

它应该输出类似以下内容:
-lpthread -ljemalloc -lgmp -ldl -lcrypt -lm

1
在“rvm reinstall”命令中需要两个破折号--with-jemalloc。另外要注意 - 许多评论平台会自动用mdash替换两个破折号 - 这让我困惑了一个小时,因为它们看起来很相似 :)此外 - 测试命令已更改,您需要使用MAINLIBS而不是LIBS。 - Kevin

5

更新 @ste20654 回答的内容:

对于我来说,这个命令是

ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"

已返回

-lm

有效的方法是这样的

ruby -r rbconfig -e "puts RbConfig::CONFIG['MAINLIBS']"

或者

ruby -r rbconfig -e "puts RbConfig::CONFIG['SOLIBS']"

如果使用 jemalloc 正确编译 Ruby,则会返回以下结果。
-lz -lpthread -lrt -lrt -ljemalloc -lgmp -ldl -lcrypt -lm

1
适用于 Ruby 2.7 的有效选项,流行的答案没有显示 ljemalloc,但是这个选项可以。 - damuz91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接