Ruby 性能综述:Ruby 1.9.1 在实际应用中的性能、GC vs EventMachine 及 Ruby 编译器

阅读数:1984 2009 年 5 月 12 日

话题:Ruby语言 & 开发架构

使用 Ruby 1.9.1 的一个重要原因就是其显著提高的性能。新的基准结果来自于现有的应用并比较了 1.8.x、JRuby 及 1.9.1

我们将 Acunote(在线的企业项目管理和 Scrum 软件)移植到了 JRuby 和 Ruby 1.9 上并运行了性能基准测试集。

Ruby 1.9.1 和 JRuby 的性能都大大超越了 1.8.6,而 1.9.1 又领先于 JRuby,虽然我们可以通过一些命令行参数来改进 JRuby 的性能,但实际情况差不多如此。

1.9.1 的性能改进不仅仅来自于更快的 VM,一些新特性也起到了很大的作用。Muhammed Ali 向我们展示了如何通过 Ruby 1.9.1 的 Fibers 来度量 Web 应用。另一方面,Muhammed 还指出了 1.9.1 中的Object#extend 所导致的内存泄漏问题

与此同时,1.8.6 仍旧是某些项目的不二之选,这是由于 1.9.1 缺少了一些库的支持。由于这个原因,很多人热衷于修复 1.8.6 的某些瓶颈。Joe Damato在其博客上发表了一些文章谈到了这些问题。比如,他谈到了--enable-pthread 背后的事情以及为何禁用该设定会提升 30% 的性能。在另一篇文章中,Joe 和Aman Gupta探索了Ruby GC 的一个问题并给出了一个小修复来解决 GC 和 EventMachine 的问题:

* 由于极大地降低了 stack frame 的大小,因此将 GC 的速度提升了 2、3 倍。

* 修复了 EventMachine 中的一个公开 bug——通过 Epoll 来使用线程会极大地降低应用的速度。其原因是每个线程都会继承一个~800,000 字节的 stack,每次上下文切换时都会对其进行复制。

* 在使用 Sinatra+Thin+Epoll+Threads 时会将请求数从每秒 500 个提升到 7000 个,太爽了。

最后,Viktor Hokstad 正在撰写一系列文章讲述如何编写 Ruby 编译器。最近的一篇谈到了怎样才能让 Ruby 更快

查看英文原文:Ruby Performance Roundup: Ruby 1.9.1 Real World Performance, GC vs EventMachine, Ruby Compiler