`
robbin
  • 浏览: 4820334 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:136995
社区版块
存档分类
最新评论

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

    博客分类:
  • Ruby
阅读更多
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)


分享到:
评论
16 楼 kaogua 2013-10-03  
现在已经是ruby2.0了, 不知道这个的效率是怎么样的, 是否可以继续写写新版本的情况。
15 楼 下一站,火星 2010-03-23  
rails3会不会遭遇滑铁卢?

目前已转入python研究,理由:

1 社区的态度,对比两个社区的一些开源的lib就知道了

2 厌烦过多的meta program
14 楼 tangyuanjian 2010-03-23  
但是ror下报表工具太少了
13 楼 healer_kx 2010-02-25  
嗯,太好了,成熟就好!否则停留在玩具阶段不是长久之计。

打算过一阵子就开始ROR。
12 楼 t0uch 2010-02-02  
REE 1.87 2010.1 已经出来了,搭配的tcmalloc是1.4。但是1.5的tcmalloc已经可以下载到。
经测试,性能有稍许提升。
11 楼 ray_linn 2010-01-19  
还不如迁移到Jruby上,Cruby之烂,有目共睹。
10 楼 zhumg123 2010-01-07  
只用Passenger 不用Apache 可以启动码?
9 楼 zhumg123 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启动的
8 楼 potian 2009-11-27  
t0uch 写道
tcmalloc 1.4不能在10.6下使用吧?
potian用的是10.5?


一直懒得升级,还在用10.5
7 楼 t0uch 2009-11-26  
tcmalloc 1.4不能在10.6下使用吧?
potian用的是10.5?
6 楼 potian 2009-11-25  
在Mac下面使用tcmalloc(现在的REE自动编译进去了)请注意,象strdup这样的函数没有调用tcmalloc分配内存,因此会导致tcmalloc free的时候出现free invalid pointer这样的错误

如果你在写C扩展的话,根据平台需要判断一下自己用malloc和memcpy写一个strdup

linux下面的libc应该没有这个问题
5 楼 zmbacker 2009-11-22  
希望发展的更好,期待ruby性能进一步提升
另外我已经把ruby应用到教育局等网站 也用rails做了甲流信息采集分析系统,目前情况来看运行稳定!
4 楼 Raecoo 2009-11-21  
potian 写道

用ab和loadrunner昼夜轰炸,1.9.1配置的情况下大约在2天后,每个Thin达到2G的内存占用,而用REE永远保持在180M左右

这个数据实在是很诱人滴
3 楼 potian 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看看怎么样了
2 楼 poster214 2009-11-20  
希望真能到發展起來,我現在選擇了ruby作為業餘語言
1 楼 下一站,火星 2009-11-19  

我看ruby离“大繁荣大发展”的时期不远了, 根据我的测试,REE1.87的性能和python2.6.2差不多,所以ruby的性能完全可以胜任一些大规模软件开发,实时性的东西可以交给Erlang处理

相关推荐

    from java to ruby -things every manager should know

    - **Ruby**:尽管 Ruby 的性能可能不如 Java,但它通过各种优化手段(如 JIT 编译器)以及高性能服务器端框架(如 Puma 或 Unicorn),仍然能够满足大多数应用场景的需求。 5. **学习曲线**: - **Java**:对于...

    js_vs_ruby

    - JavaScript 主要用于Web开发,前端与后端都有广泛应用,同时也在Node.js环境中扩展到了服务器端和移动应用开发。 - Ruby 除了Web开发,还常用于自动化脚本、数据处理和快速原型开发,尤其是Rails框架在Web应用...

    Java在WEB开发领域的革新

    例如,使用Adobe Flash为基础的RIA解决方案,如Flex或ActionScript,可以构建出无需服务器端View层的应用,同时避免了session信息的处理。这使得JavaWeb框架有机会简化其结构,专注于业务逻辑和服务的实现,而不再是...

    学编程选什么语言好?是PHP、Python还是Ruby?

    首先,PHP是一种广泛使用的服务器端脚本语言,尤其在网页开发领域。它的优点之一是入门门槛相对较低,新手可以快速上手,并通过其快速建站的能力来建立信心。PHP语言的社区支持强大,也有许多成熟的框架和库可供使用...

    The Definitive Guide to SQLite (Expert's Voice in Open Source)

    读者可以在很短的时间内学会编写形形色色的程序,包括服务器端浏览器插件以及iPhone或Android应用程序。 本书的亮点包括: 1. SQLite在C、Java、Perl、PHP、Python、Ruby和Tcl等语言中的扩展应用。 2. 对SQLite内部...

    电脑编程有哪几个方向和板块

    - 服务器端开发(Node.js):构建高性能的服务器端应用。 - Web游戏:Canvas API和WebGL技术的应用。 - **特点**: - 事件驱动模型,支持异步编程。 - 非阻塞I/O模型,提高响应速度。 - 丰富的Web技术生态系统...

    浅谈计算机应用软件开发中编程语言的选择研究中英文对照.pdf

    JavaScript主要用于网页和浏览器端的脚本编程,近年来也在服务器端得到广泛应用(如Node.js)。JavaScript的特点: - 动态类型:变量类型在运行时确定,简化了编程。 - 事件驱动:JavaScript基于事件的模型,适合...

    Nodejs 给前端带来了什么变化.pdf

    Node.js 的出现彻底改变了前端开发的格局,它将JavaScript引入了服务器端,打破了传统前端与后端的界限,促进了前后端分离的模式,并推动了Web开发的新趋势。以下几点是Node.js带给前端的重要变化: 1. **前后端...

    “后端开发框架”资源推荐

    后端开发框架是指用于简化服务器端应用程序开发的一系列工具和结构。这些框架通常提供了一套预定义的解决方案,以帮助开发者快速搭建应用逻辑和服务。一个好的后端框架能够显著提高开发效率,同时确保代码质量、安全...

    redis-4.0.1.gem

    6. **Lua脚本**:Redis支持在服务器端执行Lua脚本,这样可以实现复杂的原子操作,同时减少了网络通信的开销。 7. **消息订阅与发布**:Redis内置了发布/订阅(Pub/Sub)模式,允许客户端订阅感兴趣的频道,当有消息...

    后端开发的基本技术与框架

    后端开发作为软件开发中的关键环节,主要负责服务器端的逻辑处理、数据管理和与前端的交互。其重要性体现在以下几个方面: 1. **提高系统性能**:通过优化后端开发的技术和架构,可以显著提升应用的整体性能和响应...

    写笔记带后端.rar

    在这个上下文中,我们可以推测这个压缩包可能包含了用于构建一个在线笔记应用的服务器端代码。 描述“写笔记带后端”简洁明了,但没有提供具体的技术细节。不过,我们可以从这个描述中推断出,这个项目可能包括用户...

    软件工程专业性质.pdf

    包括HTML、CSS、JavaScript等前端技术,以及服务器端编程语言如PHP、Python、Ruby等,都是Web开发的基础技术。 CMMI(Capability Maturity Model Integration)是CMM的发展版本,不仅包括软件开发,还涵盖了系统...

    Android学习路线

    - **JavaEE (SSH框架)**:这是一种成熟的服务器端开发技术栈,包括Struts、Spring和Hibernate。虽然复杂度较高,但对于已经有Java基础的开发者来说,学习成本相对较低。 - **PHP**:简单易学,适合快速开发轻量级...

    ASP源码—老牌ASP网店 乐彼网上开店系统.zip

    ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于创建动态网页或Web应用程序。这个"ASP源码—老牌ASP网店 乐彼网上开店系统.zip"文件似乎包含了一个基于ASP技术的老牌网店系统的源代码。让我们...

    omakase:您的 Web 应用程序项目的新起点

    2. **Web 应用程序开发**:Web 应用程序是运行在服务器端,通过 Web 浏览器与用户交互的应用。常见的 Web 应用包括社交媒体平台、在线购物网站和内容管理系统等。 3. **Web 应用架构**:Web 应用通常基于 MVC(模型...

    Appium自动化测试工具介绍

    - **服务器端**: - **Appium Server**: 启动的服务位于4723端口,类似于Selenium WebDriver的测试框架。接收并解析来自客户端的标准WebDriver请求,将指令转发给中间件。 - **中间件(Bootstrap.jar)**: 用Java...

    WEB动态技术入门——CGI,Java Script探索1

    除了上述的CGI和JavaScript外,WEB动态技术还包括服务器端脚本语言如PHP、***和Ruby等,这些技术主要用于生成HTML内容、处理表单数据和与数据库交互等服务器端操作。此外,还有诸如AJAX、WebSockets等用于实现页面...

Global site tag (gtag.js) - Google Analytics