BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby性能近况:GC调优、Maglev和MacRuby

| 作者 Werner Schuster 关注 7 他的粉丝 ,译者 李明(nasi) 关注 0 他的粉丝 发布于 2009年4月19日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Ruby 1.8中的垃圾回收器在去年受到了广泛的关注。Ruby企业版(REE)的开发者们对GC进行了修改,实现了进程间的内存共享(详见InfoQ对创建者的采访)。REE已经成为部署和运行Rails应用的普遍方式,包括37Signals在内的很多实践者都在使用它。最近,REE中的GC有所改进,修正了一些bug,解决突发的冻结问题。

标准Ruby1.8.x的用户很快也可以受益于MBAPI补丁,这一补丁修正了许多GC问题及其相关的内存泄露问题,目前MBAPI由EngineYard提供赞助。

Evan Weaver提供了GC调优小贴士,并推荐了一些可以监控GC的补丁。调优的结果如下:

目前每13个请求GC就会运行一次,代价有些高,每个请求需要耗费0.009秒。这意味着可以快上个34%左右。GC调用频次与RUBY_GC_MALLOC_LIMIT的设置直接相关,但是如果我们将这个值设得再高一些,内存使用量就像吹气球那样爆掉了。

提高性能的另一个方法是寻求其他的Ruby实现,比如得益于现代JVM中成熟GC的JRuby。其他的Ruby实现也将性能的提升作为主要的目标。Rubinius正在稳步发展,而MacRuby最近在它的实验分支上也有新的进展,性能上有所提升。实验分支上的工作正在进行中

- 这个编译器现在能(据我所知)通过所有的语言规格,所以我猜它现在算是基本完成了。[..]
- 由于以上种种,IRB现在运行得不错!

更多改进

- 引入了尾部调用消除。这一优化将递归调用转换成本地回路,这样可以防止栈溢出。[..]
- 为了更快解释#eval表达式,研究了LLVM IR解释器。研究结果已经提交,在简单表达式上工作得非常不错。不过缺省情况下不会激活这一功能,这是受调用VM基元的限制所致。我们将不得不稍微修改一下LLVM解释器,让它可以完全使用。这将在不远的将来实现。

最后,GemStone的Ruby实现MagLev正在进行内部的Alpha版测试,Beta版将于Q2推出。现在,兼容性(RubySpec)和基准测试结果在MagLev的网站上已经公布。Twitter上也同步更新项目进展。

查看英文原文:Ruby Performance Roundup: GC Tuning, MagLev, MacRuby

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT