2011-11-18 28 views
1

我有一个相当小的Rails 3.1.1应用程序,以闪电般的速度架起内存。在应用程序中点击8-10次,我使用的RAM几乎达到1GB。我的导轨引擎中的内存问题?

我们检查了缓慢运行MYSQL查询的日志,没有任何内容。我们也检查了Apache日志,没有任何东西。

的应用与乘客3.0

可以运行这个问题被绑定到一些宝石时使用?此应用程序作为Rails 3.0.1应用程序开始,我们更新了rails版本。 gemfile中仍有[不建议使用?]引用。这里是的Gemfile:

gem "rails", "~> 3.1.1" 
gem "mysql2", "~> 0.3.6" 
gem 'omniauth', '0.2.6' 
gem 'json' 

group :assets do 
    gem "sass-rails", "~> 3.1.4" 
    gem "coffee-rails", "~> 3.1.1" 
    gem 'uglifier' 
end 

gem 'jquery-rails' 
gem 'execjs' 
gem 'therubyracer' 
gem 'capistrano' 

感谢

+0

你是一些如何使用内存表? –

+0

错过了评论,抱歉!不,没有内存表。 –

回答

2

这是所有关于消除可能性。某些方向:

  • 该应用程序是否以开发模式运行?开发/生产模式下的内存使用情况有差异吗?
  • 尝试停留在一个页面上,在一个控制器中。不断监视内存。它在上升吗?它只是一个控制器还是所有控制器?如果它只在一个控制器中,则有一个较小的代码库可供检查。
  • 使用Bleakhouse,Memorylogic,ScoutNew Relic等工具记忆您的应用程序。检查内存热点以查找内存。
  • 逐个消除依赖关系,查看另一个gem中的错误是否导致问题。
  • 尝试其他服务器,如Mongrel,WEBrick或Unicorn。如果行为不同,它可能是Passenger。
  • 尝试使用其他Ruby版本来查看问题是否存在。
+0

感谢这个清单。我已经可以告诉你,在开发(webrick)中,它没有任何内存问题。它只在生产服务器上。生产和开发使用红宝石1.8.7,所以它不是红宝石版本。该应用程序曾用于旧版乘客版本(2.x)。早上他们安装了Passenger 3.0,它开始“泄漏”内存。我很确定问题是乘客,但我无法“证明”它。我将开始寻找你所建议的工具的内存分析。谢谢! –

+0

祝你好运!内存问题可能很难解决。 – Daan

+0

谢谢。我敢肯定,我已经缩小到Passenger是错误的...当我点击一个链接,然后等待,让我们说1分钟,下一次点击将使应用程序崩溃。红宝石进程永远不会停止,直到我的主机以750mb的速度杀死它。这个应用程序非常小而且很直接,我不能真正相信在数据库中有大约20条记录的应用程序可能需要高达750MB的RAM。在Ruby代码中没有大的进程可能需要那么多的内存...... –

0

而不是缓慢查询,检查低效查询 - 也就是说,加载大量的从数据库记录的那种,创造大量的对象,然后在Ruby端循环它们。

或者使用Profiler如New Relic。

+0

数据库中共有约20条记录。忘了提及! –

+0

然后它可能不是数据库! :) –

+0

是的,我不这么认为;-) –

1

因为therubyracer宝石。

与乘客therubyracer使memroy泄漏。

删除therubyracer宝石或使用0.7.5版本