Rails与Sinatra进程内存使用情况?

时间:2011-04-20 00:25:21

标签: ruby-on-rails memory sinatra

有人可以评论转移到Sinatra的每个过程的改进吗?

我发现我的Web API每个Passenger Rails 3进程使用大约100MB。我想知道如果我换到Sinatra会有什么改进。

2 个答案:

答案 0 :(得分:9)

这是一个随机的非真实世界的基准,可以给你一点点想法:

               |   Real  | Private | Vir. Priv. |
---------------+---------+---------+------------|
[1]      Rails |  38.6MB |  35.9MB |   76.3MB   |
---------------+---------+---------+------------|
[2]    Sinatra |  18.7MB |  16.2MB |   51.7MB   |
---------------+---------+---------+------------|
[3]     + Haml |  19.6MB |  17.0MB |   53.7MB   |
---------------+---------+---------+------------|
[4]   + Sequel |  24.4MB |  21.7MB |   54.8MB   |
---------------+---------+---------+------------|
  1. Rails 3.0.7,创建一个shell项目,启动服务器,发出1个请求。
  2. Sinatra 1.2.3 with Thin 1.2.11,require 'sinatra'; get('/'){ "Hello" },提出1请求。
  3. ...添加Haml 3.0.25,get ('/'){ haml "%p Hello" },发出1个请求。
  4. ...添加续集3.22.0,DB = Sequel.sqlite,提出1个请求。
  5. 所有在OS X上测试过。这个测试显示a)Sinatra比Rails更加简单,b)如果你想要任何有意义的话,你需要比较苹果和苹果(在你选择的操作系统上);数字。具有相同功能的相同应用程序。

    我使用Thin + Sequel + Haml + pg在Windows上运行的真实应用程序往往每个实例运行大约50-90MB(取决于我在反向代理后运行2-4个实例的应用程序)。 YMMV。

答案 1 :(得分:0)

首先,您如何衡量内存使用情况?

建议您使用 passenger-memory-stats 来更准确地了解内存使用情况(而不是顶部等)。

一般来说,如果不自己做一些测试就很难说 - 内存使用情况可能会有很大差异,具体取决于你的应用程序实际上做了什么,而Sinatra并不一定意味着更小的内存占用。

例如,如果您使用的是ActiveRecord,则生产中的框架会缓存模型以减少加载时间。这将独立于您正在使用的应用程序框架。

虽然可能有一些事情可以调整你的Rails堆栈。

使用Ruby版本进行实验。 当与乘客一起使用时,REE可能具有一些记忆益处。 Ruby 1.9.2有很多性能改进。

查看乘客记忆选项:

  • passenger_spawn_method
  • passenger_max_pool_size

您可以做的另一件事是删除Rails堆栈本身的未使用部分(使用各种Rails Rack options)。