IT技术博客大学习 共学习 共进步

Ruby作为服务器端应用已经成熟了

robbin的自言自语 2009-11-19 09:41:18 浏览 3,561 次
JavaEye网站在过去的Ruby on rails实践当中,曾经被Ruby的内存泄露问题深深的困扰过,并且自己编写了监控Ruby进程泄露的监控脚本来解决这个问题。造成Ruby内存管理不善的原因主要来自于两个方面:

    一是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)  

建议继续学习

  1. 每个程序员都应该学习使用Python或Ruby (阅读 17,741)
  2. 我的PHP,Python和Ruby之路 (阅读 12,982)
  3. Ruby 和 Python (阅读 6,942)
  4. 为什么我们要从 NodeJS 迁移到 Ruby on Rails (阅读 6,201)
  5. 移动互联网创业公司的服务器选择 (阅读 6,182)
  6. 记上海Python社区聚会,谈Python和Ruby (阅读 4,823)
  7. Ruby 解析 HTML (Nokogiri) (阅读 4,824)
  8. 查看你服务器的安全性 (阅读 4,285)
  9. 通过HttpListener实现轻量级Web服务器[原创] (阅读 4,123)
  10. 编程语言介绍之Ruby on Rails (阅读 3,760)