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)
分享到:
相关推荐
云片短息ruby 服务器端api
Gabba - 简单的方式发送服务器端通知至Google Analytics中
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。Ruby 可运行于多种...
Rack提供了一个最小化,模块化和适应性强的界面,用于在Ruby中开发Web应用程序。 通过以最简单的方式包装HTTP请求和响应,它将Web服务器,Web框架和软件(所谓的中间件)之间的API统一并提炼成单个方法调用。
一个非常快速和简单的Ruby Web服务器
Puma - 一个Ruby的并发Web服务器
TorqueBox - 一个Ruby应用程序服务器建立在JBoss AS7和JRuby之上
Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。 Ruby 可以用来编写通用网关接口(CGI)脚本。 Ruby 可以被嵌入到超文本标记语言(HTML)。 Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby。 ...
rack, 模块式 ruby web服务器接口 rack,模块化 ruby-web服务器接口 rack 提供了在 ruby 中开发web应用程序的最小。模块化和。 通过最简单地将HTTP请求和响应包装起来,它将web服务器。web框架和( 所谓的中间件) ...
语言服务器[Alpha质量] Ruby语言服务器实现。安装如果使用的是vscode,请安装扩展。码头工人只需您就可以从拉取$ docker pull mtsmfm/language_server-rubyRuby宝石将此行添加到您的应用程序的Gemfile中: gem '...
Puma是一个专为并发构建的Ruby Web服务器。Puma是用于Ruby / Rack应用程序的简单,快速,多线程,高度并发的HTTP 1.1服务器。它仅适用于运行Rack应用程序。
ruby ssh备份远程服务器脚本,主要是学习net/scp这个模块
Falcon:用于Ruby的高性能web服务器,支持HTTP/2和HTTPS
Rails应用程序的服务器时间标头
ruby一个方便的局域网服务器 最大用处就是当共享不能访问时用它代替 还有个用处就是耍酷 1.下载安装 Ruby (Mac 平台已经自带) 配置环境变量 把Ruby安装后的bin路径配到环境变量中 2.开命令行输入 gem install ...
gcm, 在通过谷歌云消息传递( GCM )的设备上,gem 可以帮助开发者从 ruby 后端服务器发送数据到他们的移动应用程序 用于Android和iOS的Google云消息传送( GCM ) GCM gem 允许你的ruby 后端通过 Google云消息向Android...
Ruby for Rails 英文原版, pdf格式 ...第四部分讲述了如何应用第二部分和第三部分的Ruby知识来开发Rails应用。 本书适合于Ruby的初学者,也适合于想要进一步提高Ruby编程技能,开发实际Rails应用的Web程序员。
Ruby游戏我为服务器端Ruby类所做的Ruby游戏(2019)
Ansible: Ruby on Rails 服务器(Ubuntu 16.x)