高流量轨道穿孔调整

时间:2010-10-15 17:45:23

标签: ruby-on-rails performance

我试图评估各种Rails服务器解决方案。我的名单上首先是一个nginx +乘客系统。我用8 gig的RAM和2个处理器启动了一个EC2实例,安装了nginx和passenger,然后将它添加到nginx.conf文件中:

passenger_max_pool_size 30;
passenger_pool_idle_time 0;
rails_framework_spawner_idle_time 0;
rails_app_spawner_idle_time 0;
rails_spawn_method smart;

我向仅render :text => (2+2).to_s

的导轨添加了一个“真棒”控制器

然后我旋转了一个小盒子并运行它来测试它:

ab -n 5000 -c 5 'http://server/awesome'

而在盒子上运行的CPU看起来非常像这样:

05:29:12 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:29:36 PM     all     62.39      0.00     10.79      0.04     21.28      5.50

而且我注意到只需要7-10个同时请求就可以使CPU空闲时间<1%,当然这会严重拖延响应时间。

所以我想知道,很多CPU负载只是与Rails做生意的成本?它是否只能同时提供六打左右的超便宜请求,即使有一大堆内存和几个内核?有什么好的建议可以让我同时提供15-30个请求吗?

更新:尝试在“超级大型和大量CPU”EC2之类的东西上做同样的事情。神圣的废话是那很多CPU的力量。最佳点似乎是每个CPU大约2个同时请求,能够在16个同时请求时将其提升到大约630个请求/秒。不过,不知道这对于很多小盒子来说是否真的具有成本效益。

1 个答案:

答案 0 :(得分:1)

我必须说,在添加了一些memcached服务器(EC2的4个媒体)之​​后,我的Rails应用程序大大提升了支持大约20个最初支持的大约80个并发用户。几个月前,我经营着一个高流量的体育网站。数据库大小约为6演出,有大量更新/插入。

MySQL(RDS大量高使用率)缓存也有所帮助。

我尝试过使用乘客设置,但得到了一些奇怪的结果 - 比如每个线程占用250兆内存,考虑到应用程序不是很大,这很奇怪。

你也可以通过使用现货实例来节省大量的$但不完全依赖它 - 它们的价格似乎有时会飙升。我使用两个策略AutoScale - 一个带有spot实例,另一个带有on demand(读取:保留)实例。