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

4

有人对切换到Sinatra的过程中的每个流程的改进有评论吗?

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


会有很大的性能提升(很难展示数字,因为谁有相同的应用程序在Rails和Sinatra版本之间进行比较?)...但当然也有许多权衡,例如:具有活动记录的良好定义的MVC模式等。 - eggie5
2个回答

10

这里有一个随机的非真实世界的基准测试,只是为了让你略微了解一下:

               |   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项目,启动服务器,进行一次请求。
  2. 使用Sinatra 1.2.3和Thin 1.2.11,require 'sinatra'; get('/'){ "Hello" },进行一次请求。
  3. ...添加Haml 3.0.25,get ('/'){ haml "%p Hello" },进行一次请求。
  4. ...添加Sequel 3.22.0,DB = Sequel.sqlite,进行一次请求。

以上测试是在OS X上进行的。这个测试表明,a) Sinatra比Rails更加轻量级,b) 如果你想得到有意义的数字,需要在相同操作系统上进行比较。同样的应用程序,同样的功能。

我的真实应用程序在Windows上运行,使用Thin+Sequel+Haml+pg,每个实例的内存占用约为50-90MB(取决于应用程序,在反向代理后运行2-4个实例)。结果可能因人而异。


源代码呢? ;) 说真的,这并不能证明什么。 - RyanScottLewis
上表中的#4是指HAML和Sequel吗? - Saurabh Nanda
是的,#4 是 Sinatra、Haml 和 Sequel。 - Phrogz

0

首先,你是如何测量内存使用情况的?

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

一般来说,如果没有进行一些测试,很难确定内存使用情况 - 内存使用量可能会因应用程序实际执行的操作而有很大差异,而Sinatra并不一定意味着更小的内存占用。

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

但是,你可以尝试一些方法来调整Rails堆栈。

尝试使用不同版本的Ruby。当与Passenger一起使用时,REE可能具有一些内存优势。Ruby 1.9.2具有一系列性能改进。

查看Passenger内存选项:

  • passenger_spawn_method
  • passenger_max_pool_size

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接