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) |
建议继续学习:
- 每个程序员都应该学习使用Python或Ruby (阅读:16250)
- 我的PHP,Python和Ruby之路 (阅读:11826)
- Ruby 和 Python (阅读:5653)
- 为什么我们要从 NodeJS 迁移到 Ruby on Rails (阅读:5449)
- 移动互联网创业公司的服务器选择 (阅读:4942)
- Ruby 解析 HTML (Nokogiri) (阅读:3898)
- 记上海Python社区聚会,谈Python和Ruby (阅读:3757)
- 通过HttpListener实现轻量级Web服务器[原创] (阅读:3396)
- 查看你服务器的安全性 (阅读:3290)
- 编程语言介绍之Ruby on Rails (阅读:2698)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:robbin 来源: robbin的自言自语
- 标签: Ruby 服务器
- 发布时间:2009-11-19 09:41:18
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成