Ruby Ruby 用 jemalloc 有什么坑么?

u1446101911 · 2018年04月23日 · 最后由 early 回复于 2018年10月31日 · 1712 次阅读

看了几篇文章,jemalloc对多线程的ruby应用内存占用有奇效(据说还有一点点的性能提升),遂拉了给生产环境加了两台机器,一台Unicorn,一台Sidekiq,用2.3.7+jemalloc编译。

线上跑了一天多,Sidekiq的内存占用下降的非常可观,由最大3G -> 700M,GC时间略有下降,不错不错。Unicorn的内存占用大概有一成的降幅,压的很稳,响应时间基本持平,CPU目测个位数下降,毕竟Unicorn多进程,有改善已经是很满意了。

现在感觉可以把线上的ruby都切了。那么问题来了,jemalloc还有什么坑呢?有没有使用体验分享?谢谢。

共收到 18 条回复

Ruby 2.5 跟 Jemalloc 有兼容问题,其他跑了一段时间没遇到啥问题

jasl 回复

兼容问题是指怎样的表现?编译不能?运行有内存泄露?还是什么的... 不过我们估计不会直接上2.5,rails升级之后,稳妥点还是先上2.4.x

u1446101911 回复

官方提到的的 Known Issue,是 2.4.0 还是 2.5.0 忘记了,具体可以看 Ruby 的 Redmine

u1446101911 回复

那就是2.4

ksec 回复

Geeze now I don’t remember. I’ll kick it up again on Monday and see what happens. We were seeing some deadlocks at the same time because we were server side rendering react with execjs, so maybe jemalloc and V8 don’t get along. 是指这个?

还是说ruby官方那个冗长的讨论...

Nokogiri等带有C Extension的Gems会不会有雷?

nouse 回复

改的只是内存管理的部分吧... 目前已经跑了三天,没有看到什么异常,不过线上我是全部重新bundle的,gem也是全新编译。

就你说的这个我还在CI上尝试了原版237的GEMS直接替换RUBY,不做重新bundle,CI也是全通过的。

https://www.mikeperham.com/2018/04/25/taming-rails-memory-bloat/ 这个人也是Sidekiq下降很多,如果只有Sidekiq有奇效,Ruby core team不会认为是Ruby的问题。

nouse 回复

对多线程有奇效,因为我并没有用Puma,所以不知道Puma的表现

但是Unicorn也有至少15%的内存占用下降,我觉得很不错

nouse 回复

这个人?他可是 sidekiq 的作者 😹

使用 slim 镜像的情况下,jemalloc 确实可以很大的改进内存占用情况

下图前半部分是 arwineap/docker-ruby-nokogiri-phantomjs 没有使用 jemalloc

后半部分是同一个镜像开启了 jemalloc

我发现 alpine 镜像的内存情况比 使用 jemalloc 的 slim 镜像要好很多

下图前半部分是 hoteltonight/ruby-jemalloc:2.5.1-stretch-slim

后半部分是 ruby:2.5.1-alpine


  • docker ruby:2.5.1-alpine 用不了 jemalloc
  • docker ruby:2.4.1-alpine 用不了 jemalloc

测试方法(参考楼上):

  1. Dockerfile 中增加 RUN apk add --no-cache jemalloc
  2. docker_compose.yml 中增加
environment:
  LD_PRELOAD: '/usr/lib/libjemalloc.so.2'

https://github.com/docker-library/ruby/pull/198 在这里可以找到 alpine 不行的相关信息

ruby-dev 这两天还在讨论是否要默认使用 jemalloc(因为 Redis 就是这样搞的)

ksec 回复

看起来是提了段代码,但是具体从哪个版本开始还不明朗

我目前在Unicorn+Sidekiq下运行了两周接近三周,没有遇到什么问题,中间还经历了从Rails 4.2 -> 5.1,一切正常,准备完全切换到jemalloc了

early Ruby 的好朋友 -- jemalloc 中提及了此贴 10月31日 18:06
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册