2012-02-29 49 views
8

上週我們升級這是on Rails的3.0.1運行到Rails 3.2.2一個小項目。嚴重的內存泄露/ Rails中3.0升級後膨脹到Rails 3.2(紅寶石1.9.3 +乘客)

不久升級後,我們認識到,偶爾,每日2-3次,我們seening一個巨大的Phusion客運過程(1-5 GB)。

我們正在運行的Phusion客運3.0.11和Ruby 1.9.3-P0。我們已經嘗試了不同的Ruby版本(1.9.2-p290和1.9.3-p125),但沒有成功。

之後,我們試圖跟蹤我們的內存使用Oink。不幸的是,Oink沒有顯示內存膨脹的原因 - 大型進程似乎不再寫入日誌文件。

當我們降級到3.0.1的Rails問題了。有沒有人有類似的問題?我們確實檢查了我們的代碼是否有可能的內存泄漏,例如太多的ActiveRecord實例,但沒有找到任何內容。

你認爲試試獨角獸代替乘客是否值得?或者我們很可能會遇到同樣的問題?

任何有關如何追蹤內存泄漏的建議都是值得歡迎的。我們已經設置了newrelic,但沒有顯示關於內存泄漏的詳細信息。

+1

我們已經用獨角獸設置取代了乘客,現在系統按預期工作。如果這是普通乘客問題,或者Passenger/rvm可能存在問題(也許我們最近安裝/升級了它),那麼我不這麼做。 – 2012-03-01 19:00:25

+0

你會介意分享你的獨角獸設置?我有完全相同的問題,需要每6小時重新啓動服務器以防止內存溢出! – 2012-04-09 13:31:52

+2

對不起,對於遲到的答案。那麼......分享獨角獸設置可能太多,不能作爲評論發佈在這裏。快速的Google搜索應該可以幫到你。也許你從這裏開始:https://github.com/blog/517-unicorn。基本上它只是nginx與獨角獸作爲上游服務器。獨角獸設置只是一個簡單的unicorn.rb在配置....花了我們大概一個小時從乘客轉換。另一個將獨角獸部署的東西添加到我們的Capistrano配置中。 – 2012-05-07 16:15:08

回答

0

我很想知道什麼乘客內存統計顯示,什麼類型的內存,你有乘客的PassengerMaxPoolSize PassengerPoolIdleTime和任何其他乘客設置中設置。

你是如何升級乘客的?

你的apache設置是什麼樣的? prefork還是工人?

我懷疑你是把這個在包裝周圍乘客使用紅寶石看到GC表現不佳,試圖對其進行調整:

#!/bin/sh 
export RUBY_HEAP_MIN_SLOTS=600000 
export RUBY_GC_MALLOC_LIMIT=59000000 
export RUBY_FREE_MIN=200000 
exec "/usr/bin/ruby" "[email protected]" 

它應該可以解決您所看到的一般是由於一些性能問題到貧窮的ruby gc默認值。

+0

自從我們遇到這個問題已經有一段時間了。不幸的是,我不知道Passenger配置了,但我想這是默認值或推薦值。 我們使用默認安裝腳本安裝了Passenger,它也爲我們安裝了nginx。 正如我在上面的評論中寫的,我們通過使用Unicorn/nginx而不是Passenger/Nginx來解決問題。 – 2012-11-26 12:11:55

1

如果這是Red Hat兼容的Linux,則可以使用SystemTap。我不確定SystemTap是否可以在Debian/Ubuntu系統上使用,如果不存在,也可以選擇DTrace。這裏有一些文章 - 我已經很成功地跟蹤了幾個迴歸,但這些都不是內存問題(也許你可以找到一個STP腳本,可以爲你做詭計)。在這裏閱讀:

http://lukas.zapletalovi.com/2012/02/peek-into-your-ruby-app-with-systemtap.html http://lukas.zapletalovi.com/2012/01/probing-ruby-apps-with-systemtap-in.html http://sourceware.org/systemtap/wiki/RubyMarker

最後一個環節給出了可在Ruby中SystemTaps箍成的探針。有人認爲像gc運行或內存分配,可以幫助你。祝你好運!