2010-06-28 85 views
5

我在使用我的Ruby on Rails應用程序(v2.3.8)時使用collectiveidea's delayed_job,並在8GB RAM Slicehost機器上運行約40個後臺作業(Ubuntu 10.04 LTS,Apache 2)。延遲作業泄漏內存?

比方說,我ssh到我的服務器沒有工人運行。當我做free -m時,我看到我通常使用大約1GB的RAM。然後,在啓動工作人員並等待大約一分鐘時間以供代碼使用它們後,我達到了大約4GB。如果我在一兩個小時內回來,我會在8GB和交換內存,我的網站將產生502錯誤。

到目前爲止,我剛剛殺死工人並重新啓動他們,但我寧願修復問題的根源。有什麼想法嗎?這是內存泄漏嗎?或者,如朋友所說,我是否需要找出運行垃圾收集的方法?

+0

這聽起來像一個內存泄漏問題,但它可以在您的代碼中由deleayed_job運行,它不得處於delayed_job中。一些代碼審查可能會有所幫助。 – jigfox 2010-06-28 16:56:39

+0

也記住,1.9和1.8永遠不會將內存送回操作系統。 – tliff 2010-06-28 17:37:01

回答

-3

幾乎每次有人問到這個問題,問題都出現在他們的代碼中。嘗試使用其中一個可用的分析工具來查找您的工作泄漏的位置。 (https://github.com/wycats/ruby-prof或類似的。)

在每個作業結束時觸發GC將以降低吞吐量爲代價來降低最大內存使用量。它不會阻止Ruby膨脹到任何單個作業所需的最大大小,但是,因爲Ruby無法將內存釋放回操作系統。我不建議採取這種方法。