- 浏览: 4821557 次
- 性别:
- 来自: 上海
博客专栏
-
robbin谈管理
浏览量:137075
文章分类
最新评论
-
xly1981:
领导者是团队的灵魂。深入一线的过程,包括代码review,能帮 ...
robbin谈管理:改造团队的经验(2) -
jiehuangwei:
像这种总结比较性的ppt文档可以多发啊
Web并发模型粗浅探讨 -
linux1308:
看完学习到了很多东西,感谢推荐!
推荐一篇很好的RoR部署方案性能评测 -
zweite:
直接对搜索的结果进行缓存是不是会更快一点呢
漫谈应用缓存的命中率问题 -
kaogua:
现在已经是ruby2.0了, 不知道这个的效率是怎么样的, 是 ...
Ruby作为服务器端应用已经成熟了
JavaEye之前的新闻ruby内存泄漏的罪魁祸首 - 幽灵指针详细分析了当前Ruby官方版本(MRI版本)内存泄漏的原因。如今Brent Roman发布了一个超级大补丁包,里面包含了6个补丁文件,用来解决Ruby内存泄漏问题,而且还可以提高Ruby的性能。用了该补丁以后,效果如何呢?让我们用Rails应用来测试一下。
安装 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应用的吞吐量。我设置的堆参数如下:
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的路由和页面模板渲染,测试结果如下:
测试小结
1、ruby GC patch以后,性能提升非常明显,代价是消耗更多内存
2、MBARI patch不但节省了少量内存,而且有惊人的性能提升效果
3、MBARI+Railsbench 两个patch加在一起效果更好,性能更进一步
三、JavaEye实际应用的测试
用Rails简单应用测试的效果不能说明什么问题,我选择了JavaEye两个典型的消耗性能的页面进行测试。
测试一:访问robbin博客首页
测试二:访问robbin某篇博客文章
测试小结
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,要给作者一点时间来逐渐完善它。
代码不会冻结,冻结的只是new feature.
四、测试总结
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%吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。
不好意思,我指的是以前fastcgi进程因为内存泄露而不得不重启的现象是否彻底没有了。
做了很多次性能测试,内存表现都非常平稳。性能测试和压力测试测不出来内存泄漏。
但部署到JavaEye网站上面,内存泄漏问题并没有彻底消失,但是的确有所改善。也许,Rails的内存泄漏问题也不见得全是ruby的问题,有很大可能Rails框架也有问题。我记得原来用Rails1.2的时候,内存泄漏的非常缓慢,Rails2.0以后泄漏速度变快了很多(但不排除现在网站访问量比原来大很多造成的),而且会出现一些内存突然暴涨的现象,似乎是某个特定的操作引起的,但是一直没有定位到它。升级到Rails2.0以后,唯一用的比较多的带C库扩展的只有Hpricot,现在高度怀疑是Hpricot解析不规则html tag引起的内存泄漏。
四、测试总结
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 更值得期待
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。
不好意思,我指的是以前fastcgi进程因为内存泄露而不得不重启的现象是否彻底没有了。
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。
安装 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,要给作者一点时间来逐渐完善它。
评论
9 楼
robbin
2008-12-23
火星叔叔马丁 写道
1.9.1明年1月release吧?
不知道代码是否已冻结
不知道代码是否已冻结
代码不会冻结,冻结的只是new feature.
8 楼
robbin
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%吗?
7 楼
robbin
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引起的内存泄漏。
6 楼
wosmvp
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 更值得期待
5 楼
花花公子
2008-12-23
robbin 写道
花花公子 写道
测试过程中lighttpd有重启过吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。
不好意思,我指的是以前fastcgi进程因为内存泄露而不得不重启的现象是否彻底没有了。
4 楼
robbin
2008-12-23
花花公子 写道
测试过程中lighttpd有重启过吗?
每次测试都需要切换不同的ruby版本,设置不同的GC参数,FastCGI进程当然需要重起。至于lighttpd当然不需要重起。
3 楼
花花公子
2008-12-23
测试过程中lighttpd有重启过吗?
2 楼
janboo
2008-12-23
Ruby问题终于得到很好的解决,
这一直是我的一块心病,下一个项目java可以靠边站了。
感谢robbin做了那么详细有说服力的测试。
这一直是我的一块心病,下一个项目java可以靠边站了。
感谢robbin做了那么详细有说服力的测试。
1 楼
janboo
2008-12-23
看到绿色,就看到了希望
发表评论
-
《松本行弘的程序世界》推荐序
2011-07-21 13:47 15261在流行的编程语言中,ruby是一个比较另类的存在,这是因为大多 ... -
从Rails聊聊小公司的研发团队建设
2011-03-23 10:49 37213首先分享一点数据吧: JavaEye的PV到了140万了,一 ... -
Ruby作为服务器端应用已经成熟了
2009-11-17 14:55 15933JavaEye网站在过去的Ruby on rails实践当中, ... -
基于资源的HTTP Cache的实现介绍
2009-09-05 00:27 17047我们都知道浏览器会缓 ... -
请注意Rails2.3自带的memcache-client有性能问题
2009-03-23 18:05 14473Rails2.3版本发布了,这个版本内部的改动非常大,相关介绍 ... -
监视Rails进程内存泄漏的技巧
2008-12-30 21:56 10951Rails应用比较容易遇到的两类性能问题:一类是Rails执行 ... -
在top监视窗口显示Rails当前正在执行的请求URL
2008-12-01 14:15 9857这是一个从PragDave的博客上面学来的技巧,很实用,很co ... -
对Ruby VM的GC的思考
2008-09-02 23:41 8977Ruby虽然是动态脚本语言 ... -
推荐一篇很好的RoR部署方案性能评测
2008-07-08 11:55 9635今年年初的时候,我写了一篇RoR部署方案深度剖析的文章,分析了 ... -
Ruby和Rails的缺点
2008-06-25 21:08 17400有人说,robbin你说了那么多RoR的优点,你啥时候说说Ro ... -
Skynet --- ruby的类Google Map/Reduce框架
2008-06-02 00:39 8294Skynet是一个很响亮的名 ... -
rmmseg-cpp - 简洁高效的ruby中文分词程序
2008-05-27 00:47 11234我在前一篇文章向大家 ... -
使用libmmseg实现Ruby的中文分词功能
2008-05-24 21:43 11323用Ruby on Rails开发web2.0网站的人都知道,r ... -
mod_rails尝鲜
2008-04-13 14:32 8080Passenger(俗称mod_rails)是 ... -
Lighttpd和RoR安装配置的疑难解答
2008-03-07 11:09 14843之前写过一篇在Linux平 ... -
JavaEye网站的RoR性能优化经验谈
2008-01-20 16:11 18442JavaEye网站从2006年9月11 ... -
RoR部署方案深度剖析
2008-01-14 03:10 14776RoR的部署方案可谓五花八门,有Apache/Fastcgi方 ... -
RoR网站如何利用lighttpd的X-sendfile功能提升文件下载性能
2008-01-12 17:45 10252传统的Web服务器在处理文件下载的时候,总是先读入文件内容到应 ... -
Ruby为什么会受程序员的欢迎?
2008-01-07 20:08 15752孟岩最近写了一篇博客 ... -
Ruby on Rails 2.0的新特性介绍
2007-12-10 21:32 15617万众瞩目的Ruby on Rails 2.0已经发布了,Rai ...
相关推荐
卡索萨注释应用程序可编辑在MBARI的Cthulthu中创建的本地化有用的链接:- -去做: 完整的 使用Gradle或Maven的原型应用程序 将2个单独的工作UI添加到原型 创建一些使用JavaFX的示例程序
该软件是由加利福尼亚州帕萨迪纳市的蒙特利湾水族馆研究所(MBARI),加利福尼亚理工学院(Caltech)和南加州大学合作设计的。 使用神经形态选择性注意算法处理视频或静止帧。 使用线性卡尔曼滤波器,最近邻,基于...
UUV是一种能够在水下自主运行的无人航行器,通常分为缆控航行器(Remotely Operated Vehicle, ROV)和自主水下航行器(Autonomous Underwater Vehicle, AUV)两大类。近年来,UUV技术取得了显著进步,尤其是在美国。例如...
-e AUTHENTICATION_SERVICE= " org.mbari.vars.annotation.auth.BasicJwtService " \ -e BASICJWT_CLIENT_SECRET= " xxxx " \ -e BASICJWT_SIGNING_SECRET= " xxxx " \ -e DATABASE_ENVIRONMENT=production \ -...
matlab中频谱与功率谱密度代码蓝鲸移民 该存储库包含生成与手稿相关的分析和图形所必需的代码和数据, “基于动物的度量能够对...MBARI的MARS水听器的每日功率谱密度 8月-12月(蓝鲸高峰演唱季)每日平均频谱水平分别为