Better Rails Deployment
原文地址:http://www.blogkid.net/archives/2585.html
我用着一台Linode 720服务器,上面跑着两套Rails应用(1 2),都是用nginx+Thin的方式。除此以外还有几个wordpress搭建的blog,用nginx+fastcgi跑php。观察发现,虽然用Thin跑Rails应用要比Mongrel快些,但Thin还是需要在后端开多个进程。要知道Rails是吃内存的大户,每个thin进程占用了近50M内存。
使用thin的结果就是,机器720M物理内存仅余7M左右,Swap占用了400多M。很多时候有请求过来,观察到系统iowait非常高,是典型内存不够的状况。
第一次优化,用上REE
在twitter上看到robbinfan写了使用REE的一些细节,才发现很多大的Rails应用(如twitter)都把运行环境迁到了REE上。于是打算装一个尝试一下。在Ubuntu上可以直接用deb包安装(看起来这个版本很新啊,090928):
wget http://rubyforge.org/frs/download.php/64478/ruby-enterprise_1.8.7-20090928_amd64.deb
dpkg -i ruby-enterprise_1.8.7-20090928_amd64.deb
装好之后,系统中会有两套Ruby。如果以前用apt-get安装了Ruby,则旧的Ruby会在 /usr/bin/ruby ;新的Ruby在/usr/local/bin/ruby。如何区分二者呢?可以用 -v 查看一下Ruby的版本号:
root@beijing:~# /usr/local/bin/ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux], MBARI 0×6770, Ruby Enterprise Edition 20090928root@beijing:~# ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux], MBARI 0×6770, Ruby Enterprise Edition 20090928
可以看到,此时系统默认的Ruby已经是新版了。但还不能直接使用新的Ruby来启动Thin进程,还需要安装一系列Rails项目所依赖的gems。
之后,在/var/lib/gems/1.8/bin/thin 中,把第一行的 #!/usr/bin/ruby1.8 改为 #!/usr/local/bin/ruby ,即可使用REE的Ruby启动Thin进程。
采用REE启动Thin之后,每个Thin进程占用的内存降低到35M,比原来的50M节约了将近30%。
第二次优化,使用Passenger
自从Passenger for nginx推出,就一直想试试,但之前几次都没成功。后来搜索了一下解决方法,发现需要将 config/enviroment.rb 的所有者改成www-data。修改之后果然就能跑起来了。
安装Passenger的过程非常简单:
gem install passenger
passenger-install-nginx-module
之后只要按照提示不停回车即可。最终会把nginx安装在/opt/nginx(这个地址也可以在安装过程中修改)。此时需要把原来配置文件cp过去,然后把用Thin做后端服务的部分注释掉,换成 “passenger_enabled on; “。一切都已经完成,启动新的nginx时,Rails应用就由Passenger来接管了。
Passenger的优点在于可以按需分配进程,这一点就把Thin和Mongrel这种预先启动一大堆进程的给比下去了。当然,表面上看动态分配进程的开销更大;但根据评测来看,影响并不大,而且使用了REE的Passenger要比其他方式都快很多。评测没有对nginx+Passenger+REE给出数据,我想怎么也不会比apache差吧。
从我的VPS的角度,采用REE+Passenger后,系统平均的负载从0.5以上降到0.1以下,空闲物理内存多数时候在100多M甚至200多M,比之前7M有了大幅改善;Swap仅使用了不到200M,也很少出现比较高的iowait。
总地来说,REE和Passenger都值得尝试,也能带来切实的效果。两个最好一起用上,因为本来就是同一家(Phusion)的东西。


有空弄弄nginx awstats吧.
我让nginx把图片、css这些都不记日志了,所以统计肯定会不准的。
对,REE和Passenger都值得尝试
我是一直使用的 Passenger Nginx 部署 Rails 项目的,很舒服,不过我的 Nginx user 使用的是 VPS 账号,哈哈
很想试试 REE ,可才把服务器修好不久,不想折腾了
用服务器,真有钱啊
这vps缺点就是内存小,cpu倒是一直够用。io貌似也不太上的去
这vps缺点就是内存小,cpu倒是一直够用。io貌似也不太上的去
提交个replay,出了个:
504 Gateway Time-out
nginx/0.7.61
多谢反馈