锁定老帖子 主题:Ruby作为服务器端应用已经成熟了
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-17
最后修改:2009-12-08
一是Ruby GC的实现本身存在很多问题,关于这一点,以前已经多次讨论,随着MBARI内存补丁的发布,已经基本解决。特别是随着Ruby Enterprise Edition集成MBARI补丁,以及不断完善Ruby实现,已经让Ruby可以作为一个稳定的后台服务的实现了。 二是一些内存处理有问题的Ruby本地扩展库造成的内存泄露,这种情况就必须尽量避免使用第三方库,即使要用,也要保证它的稳定性。比方说JavaEye最早使用RMagic处理图片,之后改成了mini_magick,JavaEye曾经一直使用hpricot来处理html tag和博客导入,也经常造成内存泄露,最近把hpricot全部替换成nokogiri以后解决了内存泄露。 在这里特别值得一提的是REE(Ruby Enterprise Edition),随着REE1.8.7版本发布,REE不但可以提供ruby稳定的内存使用,而且经过GC参数的调整,可以最大化ruby服务端处理性能,非常值得推荐使用。 JavaEye网站在去掉hpricot,使用最新版本REE之后,内存泄露问题已经彻底消失。目前JavaEye网站使用的是rails2.3.4版本,fastcgi进程启动以后使用了230MB内存,经过一段时间运行之后,可以稳定在210MB长期运行,性能也相当不俗。 因此现在可以认为,Ruby作为服务器端应用已经到了成熟期了,完全可以放心在大型应用系统当中使用了,特别是Ruby也可以用来作为一个不需要高性能处理的long-term后台服务了。 最后简单说说REE的安装: 1、下载:http://www.rubyenterpriseedition.com/download.html 2、REE提供了编译好的二进制版本,不过我喜欢自己编译,编译的步骤可以看文档:REE Documentation 3、编译和标准Ruby是一样的,但是REE提供了Google tcmalloc库,可以提高Ruby分配内存的效率,编译tcmalloc稍稍麻烦一点: cd ruby-enterprise-x.x.x/source/distro/google-perftools-* ./configure --prefix=/usr/local --disable-dependency-tracking make libtcmalloc_minimal.la rm -f /usr/local/lib/libtcmalloc_minimal*.so* cp -Rpf .libs/libtcmalloc_minimal*.so* /usr/local/lib/ 编译ruby的时候修改Makefile文件,寻找 LIBS,添加$(PRELIBS) LIBS = $(PRELIBS) -ldl -lcrypt -lm $(EXTLIBS) make PRELIBS="-Wl,-rpath,/usr/local/lib -L/usr/local/lib -ltcmalloc_minimal" 然后检测一下是否链接了tcmalloc库: ldd ruby 应该可以找到如下信息: libtcmalloc_minimal.so.0 => /usr/local/lib/libtcmalloc_minimal.so.0 (0x00002b748b51c000) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-19
我看ruby离“大繁荣大发展”的时期不远了, 根据我的测试,REE1.87的性能和python2.6.2差不多,所以ruby的性能完全可以胜任一些大规模软件开发,实时性的东西可以交给Erlang处理 |
|
返回顶楼 | |
发表时间:2009-11-20
希望真能到發展起來,我現在選擇了ruby作為業餘語言
|
|
返回顶楼 | |
发表时间:2009-11-20
最后修改:2009-11-20
REE表现相当不错,我这里有一个实际的项目
用ab和loadrunner昼夜轰炸,1.9.1配置的情况下大约在2天后,每个Thin达到2G的内存占用,而用REE永远保持在180M左右 性能上REE也比1.9.1能够高出20%左右 不过1.9的unicode处理和语法实在是有很大的改进,现在只好等到1.9.2看看怎么样了 |
|
返回顶楼 | |
发表时间:2009-11-21
potian 写道 用ab和loadrunner昼夜轰炸,1.9.1配置的情况下大约在2天后,每个Thin达到2G的内存占用,而用REE永远保持在180M左右 这个数据实在是很诱人滴 |
|
返回顶楼 | |
发表时间:2009-11-22
希望发展的更好,期待ruby性能进一步提升
另外我已经把ruby应用到教育局等网站 也用rails做了甲流信息采集分析系统,目前情况来看运行稳定! |
|
返回顶楼 | |
发表时间:2009-11-25
最后修改:2009-11-25
在Mac下面使用tcmalloc(现在的REE自动编译进去了)请注意,象strdup这样的函数没有调用tcmalloc分配内存,因此会导致tcmalloc free的时候出现free invalid pointer这样的错误
如果你在写C扩展的话,根据平台需要判断一下自己用malloc和memcpy写一个strdup linux下面的libc应该没有这个问题 |
|
返回顶楼 | |
发表时间:2009-11-26
tcmalloc 1.4不能在10.6下使用吧?
potian用的是10.5? |
|
返回顶楼 | |
发表时间:2009-11-27
t0uch 写道 tcmalloc 1.4不能在10.6下使用吧?
potian用的是10.5? 一直懒得升级,还在用10.5 |
|
返回顶楼 | |
发表时间:2010-01-07
最后修改:2010-01-07
ruby 内存一直增加
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2009.10 rails 1.2.6 rails 2.3.5同时存在 sqlite3-ruby (1.2.5) sqlite3 mysql数据库,都用过 内存总是在增加。 ldd ruby libtcmalloc_minimal.so.0 => /usr/local/lib/libtcmalloc_minimal.so.0 (0xb7eec000) 现在内存还是一直在增加,1g内存,由原来的2.9%,增加到4.0% 请问还要配置什么啊, ubuntu8.0.4 32位系统 请求帮助? 我是用mongrel或webrick启动的 |
|
返回顶楼 | |