2011-11-18 49 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版本