ruby MBARI大补丁性能评测报告

JavaEye之前的新闻[url=http://www.iteye.com/news/4407-ruby-memory-leak-culprit---the-ghost-references-to-stack]ruby内存泄漏的罪魁祸首 - 幽灵指针[/url]详细分析了当前Ruby官方版本(MRI版本)内存泄漏的原因。如今Brent Roman发布了一个[url=http://sites.google.com/site/brentsrubypatches/]超级大补丁包[/url],里面包含了6个补丁文件,用来解决Ruby内存泄漏问题,而且还可以提高Ruby的性能。用了该补丁以后,效果如何呢?让我们用Rails应用来测试一下。

安装 Brent Roman的MBARI补丁包的办法,JavaEye的新闻[url=http://www.iteye.com/news/4592-resolve-memory-leaks-ruby-patch-release]解决ruby内存泄漏的超级大补丁发布啦[/url]已经介绍了,这里不复述。

[b][size=medium]一、测试环境介绍[/size][/b]

AMD64位的服务器,SuSE Linux,gcc3.3.3,分别测试如下四个版本的ruby解析器:

[b]1、Ruby 1.8.7-p72官方版本[/b]
这是官方标准版本,作为测试的基准

[b]2、Ruby 1.8.7-p72(打Railsbench GC patch)[/b]
Railsbench GC patch可以让你修改ruby堆内存大小,设置合理的堆内存可以更加有效利用ruby虚拟内存,降低GC频率,提高Rails应用的吞吐量。我设置的堆参数如下:
RUBY_HEAP_MIN_SLOTS=600000
RUBY_HEAP_SLOTS_INCREMENT=600000
RUBY_HEAP_FREE_MIN=100000
RUBY_GC_MALLOC_LIMIT=60000000


[b]3、Ruby 1.8.7-p72(打MBARI patch)[/b]
打了Brent Roman的MBARI补丁包的ruby版本,测试他的内存和性能

[b]4、Ruby 1.8.7-p72(打MBARI patch,设置Railsbench GC堆内存参数)[/b]
由于MBARI和Railsbench的补丁不能同时打,所以我在打了MBARI补丁基础上,手工修改了gc.c源代码,将堆内存参数设置为和第2个测试保持一致。

[b][size=medium]二、Rails简单应用测试[/size][/b]

创建一个简单的rails应用,用ab进行压力测试,主要是测试Rails的路由和页面模板渲染,测试结果如下:

ab -c 1 -n 1000 http://localhost:3000/test/index
-----------------------------------------------------
ruby 106 request/s 39MB
ruby GC patch 125 request/s 60MB
ruby MBARI patch 160 request/s 35MB
ruby MBARI merge GC patch 173 request/s 60MB


[b]测试小结[/b]
1、ruby GC patch以后,性能提升非常明显,代价是消耗更多内存
2、MBARI patch不但节省了少量内存,而且有惊人的性能提升效果
3、MBARI+Railsbench 两个patch加在一起效果更好,性能更进一步

[b][size=medium]三、JavaEye实际应用的测试[/size][/b]

用Rails简单应用测试的效果不能说明什么问题,我选择了JavaEye两个典型的消耗性能的页面进行测试。

测试一:访问robbin博客首页

ab -c 1 -n 100 http://robbin.iteye.com/
------------------------------------------------------
ruby 1.69 request/s 136MB
ruby GC patch 2.81 request/s 179MB
ruby MBARI patch 1.96 request/s 103MB
ruby MBARI merge GC patch 2.90 request/s 158MB


测试二:访问robbin某篇博客文章

ab -c 1 -n 100 http://robbin.iteye.com/blog/283992
------------------------------------------------------
ruby 2.20 request/s 136MB
ruby GC patch 3.61 request/s 179MB
ruby MBARI patch 2.47 request/s 103MB
ruby MBARI merge GC patch 3.73 request/s 158MB


[b]测试小结[/b]
1、Railsbench的GC patch以消耗更多内存为代价,极大提高了ruby的性能,性能提高了大约[color=red]65%[/color]
2、MBARI patch非常有效的降低了ruby的内存消耗,同时性能也有大约[color=red]13%[/color]的提升
3、MBARI+Railsbench patch消耗的内存高于Ruby官方版本,但是低于Railsbench patch,有效控制了内存,同时性能再创新高,比ruby官方版本性能提升了大约[color=red]70%[/color]。

[b][size=medium]四、测试总结[/size][/b]

1、Railsbench GC patch提供了堆内存参数调整,通过合理的参数调整,ruby性能有巨大提升(在JavaEye实际应用测试中提升了65%),代价就是内存消耗更大。

2、MBARI patch本身是为了解决ruby内存泄漏问题的,对ruby内存占用有明显的改善作用,而且对性能也有明显的提升(13%的提升)

3、如果MBARI patch 合并了Railsbench patch,是最理想的结果,在改善ruby内存泄漏的同时,可以提升性能达到70%的水平。

4、MBARI目前在处理复杂的正则表达式匹配上面还有bug,要给作者一点时间来逐渐完善它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值