浏览 6049 次
锁定老帖子 主题:ruby MBARI大补丁性能评测报告
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-23
最后修改:2008-12-23
ruby内存泄漏的罪魁祸首 - 幽灵指针详细分析了当前Ruby官方版本(MRI版本)内存泄漏的原因。如今Brent Roman发布了一个超级大补丁包,里面包含了6个补丁文件,用来解决Ruby内存泄漏问题,而且还可以提高Ruby的性能。用了该补丁以后,效果如何呢?让我们用Rails应用来测试一下。
JavaEye之前的新闻安装 Brent Roman的MBARI补丁包的办法,JavaEye的新闻解决ruby内存泄漏的超级大补丁发布啦已经介绍了,这里不复述。 一、测试环境介绍 AMD64位的服务器,SuSE Linux,gcc3.3.3,分别测试如下四个版本的ruby解析器: 1、Ruby 1.8.7-p72官方版本 这是官方标准版本,作为测试的基准 2、Ruby 1.8.7-p72(打Railsbench GC patch) 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 3、Ruby 1.8.7-p72(打MBARI patch) 打了Brent Roman的MBARI补丁包的ruby版本,测试他的内存和性能 4、Ruby 1.8.7-p72(打MBARI patch,设置Railsbench GC堆内存参数) 由于MBARI和Railsbench的补丁不能同时打,所以我在打了MBARI补丁基础上,手工修改了gc.c源代码,将堆内存参数设置为和第2个测试保持一致。 二、Rails简单应用测试 创建一个简单的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 测试小结 1、ruby GC patch以后,性能提升非常明显,代价是消耗更多内存 2、MBARI patch不但节省了少量内存,而且有惊人的性能提升效果 3、MBARI+Railsbench 两个patch加在一起效果更好,性能更进一步 三、JavaEye实际应用的测试 用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 测试小结 1、Railsbench的GC patch以消耗更多内存为代价,极大提高了ruby的性能,性能提高了大约65% 2、MBARI patch非常有效的降低了ruby的内存消耗,同时性能也有大约13%的提升 3、MBARI+Railsbench patch消耗的内存高于Ruby官方版本,但是低于Railsbench patch,有效控制了内存,同时性能再创新高,比ruby官方版本性能提升了大约70%。 四、测试总结 1、Railsbench GC patch提供了堆内存参数调整,通过合理的参数调整,ruby性能有巨大提升(在JavaEye实际应用测试中提升了65%),代价就是内存消耗更大。 2、MBARI patch本身是为了解决ruby内存泄漏问题的,对ruby内存占用有明显的改善作用,而且对性能也有明显的提升(13%的提升) 3、如果MBARI patch 合并了Railsbench patch,是最理想的结果,在改善ruby内存泄漏的同时,可以提升性能达到70%的水平。 4、MBARI目前在处理复杂的正则表达式匹配上面还有bug,要给作者一点时间来逐渐完善它。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-23
看到绿色,就看到了希望
|
|
返回顶楼 | |
发表时间:2008-12-23
Ruby问题终于得到很好的解决,
这一直是我的一块心病,下一个项目java可以靠边站了。 感谢robbin做了那么详细有说服力的测试。 |
|
返回顶楼 | |
发表时间:2008-12-23
测试过程中lighttpd有重启过吗?
|
|
返回顶楼 | |
发表时间:2008-12-23
花花公子 写道 测试过程中lighttpd有重启过吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。 |
|
返回顶楼 | |
发表时间:2008-12-23
robbin 写道 花花公子 写道 测试过程中lighttpd有重启过吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。 不好意思,我指的是以前fastcgi进程因为内存泄露而不得不重启的现象是否彻底没有了。 |
|
返回顶楼 | |
发表时间:2008-12-23
robbin 写道 四、测试总结 1、Railsbench GC patch提供了堆内存参数调整,通过合理的参数调整,ruby性能有巨大提升(在JavaEye实际应用测试中提升了65%),代价就是内存消耗更大。 2、MBARI patch本身是为了解决ruby内存泄漏问题的,对ruby内存占用有明显的改善作用,而且对性能也有明显的提升(13%的提升) 3、如果MBARI patch 合并了Railsbench patch,是最理想的结果,在改善ruby内存泄漏的同时,可以提升性能达到70%的水平。 4、MBARI目前在处理复杂的正则表达式匹配上面还有bug,要给作者一点时间来逐渐完善它。 想想,还是 Ruby1.9.1 更值得期待 ![]() |
|
返回顶楼 | |
发表时间:2008-12-23
最后修改:2008-12-23
花花公子 写道 robbin 写道 花花公子 写道 测试过程中lighttpd有重启过吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。 不好意思,我指的是以前fastcgi进程因为内存泄露而不得不重启的现象是否彻底没有了。 做了很多次性能测试,内存表现都非常平稳。性能测试和压力测试测不出来内存泄漏。 但部署到JavaEye网站上面,内存泄漏问题并没有彻底消失,但是的确有所改善。也许,Rails的内存泄漏问题也不见得全是ruby的问题,有很大可能Rails框架也有问题。我记得原来用Rails1.2的时候,内存泄漏的非常缓慢,Rails2.0以后泄漏速度变快了很多(但不排除现在网站访问量比原来大很多造成的),而且会出现一些内存突然暴涨的现象,似乎是某个特定的操作引起的,但是一直没有定位到它。升级到Rails2.0以后,唯一用的比较多的带C库扩展的只有Hpricot,现在高度怀疑是Hpricot解析不规则html tag引起的内存泄漏。 |
|
返回顶楼 | |
发表时间:2008-12-23
最后修改:2008-12-23
wosmvp 写道 robbin 写道 四、测试总结 1、Railsbench GC patch提供了堆内存参数调整,通过合理的参数调整,ruby性能有巨大提升(在JavaEye实际应用测试中提升了65%),代价就是内存消耗更大。 2、MBARI patch本身是为了解决ruby内存泄漏问题的,对ruby内存占用有明显的改善作用,而且对性能也有明显的提升(13%的提升) 3、如果MBARI patch 合并了Railsbench patch,是最理想的结果,在改善ruby内存泄漏的同时,可以提升性能达到70%的水平。 4、MBARI目前在处理复杂的正则表达式匹配上面还有bug,要给作者一点时间来逐渐完善它。 想想,还是 Ruby1.9.1 更值得期待 ![]() 两者并不冲突。MBARI如果稳定下来的话,迟早会合并到ruby 1.9.1源代码里面的。难道你不希望1.9.1解决内存泄漏,而且速度可以再提高70%吗? |
|
返回顶楼 | |
发表时间:2008-12-23
火星叔叔马丁 写道 1.9.1明年1月release吧?
不知道代码是否已冻结 代码不会冻结,冻结的只是new feature. |
|
返回顶楼 | |