有人对切换到Sinatra的过程中的每个流程的改进有评论吗?
我发现我的Web API在每个Passenger Rails 3进程中使用大约100MB。 我想知道如果我切换到Sinatra,改进会是什么。
有人对切换到Sinatra的过程中的每个流程的改进有评论吗?
我发现我的Web API在每个Passenger Rails 3进程中使用大约100MB。 我想知道如果我切换到Sinatra,改进会是什么。
这里有一个随机的非真实世界的基准测试,只是为了让你略微了解一下:
| 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 |
---------------+---------+---------+------------|
require 'sinatra'; get('/'){ "Hello" }
,进行一次请求。get ('/'){ haml "%p Hello" }
,进行一次请求。DB = Sequel.sqlite
,进行一次请求。以上测试是在OS X上进行的。这个测试表明,a) Sinatra比Rails更加轻量级,b) 如果你想得到有意义的数字,需要在相同操作系统上进行比较。同样的应用程序,同样的功能。
我的真实应用程序在Windows上运行,使用Thin+Sequel+Haml+pg,每个实例的内存占用约为50-90MB(取决于应用程序,在反向代理后运行2-4个实例)。结果可能因人而异。
首先,你是如何测量内存使用情况的?
建议使用passenger-memory-stats来更准确地了解内存使用情况(而不是使用top等工具)。
一般来说,如果没有进行一些测试,很难确定内存使用情况 - 内存使用量可能会因应用程序实际执行的操作而有很大差异,而Sinatra并不一定意味着更小的内存占用。
例如,如果你正在使用ActiveRecord,则模型会在生产环境中由框架缓存以减少加载时间。这将独立于你所使用的应用程序框架而发生。
但是,你可以尝试一些方法来调整Rails堆栈。
尝试使用不同版本的Ruby。当与Passenger一起使用时,REE可能具有一些内存优势。Ruby 1.9.2具有一系列性能改进。
查看Passenger内存选项:
另外一件事是删除Rails堆栈本身未使用的部分(使用各种Rails Rack options)。