2012-11-17 56 views
5

所以我有這個軌道應用程序與一個可怕的內存泄漏問題。我在Heroku上運行它,在過去的幾天裏,我一直試圖弄清楚究竟是什麼導致了它,我不得不每隔5個小時不斷重啓應用程序,或者內存超過512,我的應用程序崩潰。Rails應用程序中的內存泄漏...字符串噩夢

我正在使用Oink,而且我沒有看到任何與我實例化的類有任何可疑的地方。唯一的一點是每次頁面加載時,使用的內存都會增加。它甚至不關心我加載哪個頁面,這看起來是隨機的。

New Relic也沒有太多的幫助,因爲它不需要做任何一個特定的控制器操作。

我唯一能找到的就是使用ObjectSpace,它在內存中顯示了大量的字符串對象,並且這個數字只是增長和增長。我使用了一個小工具來記錄字符串的值,它們都是空白的。不是零,而是空白。我的產品應用程序定期使用超過200,000個字符串對象。

有沒有人知道這些可能來自哪裏?這真的讓我不得不每隔五個小時在我的電腦上讓我的網站保持活躍。

謝謝!

+1

除了只是刪除代碼之外,很難給出具體的建議,除非您有儘可能最小的示例展示問題併發布 –

+0

並在替代服務器上運行它,並用常量CURL請求點擊它,直到您可以重新生成爲止。 – peterept

+0

建議:不要做'string = string1 + string 2',也不要'string + = string1'。做:'string << string 1',沒有附加字符串是這樣創建的 – apneadiving

回答

8

好的,這是絕對荒謬的,但經過兩週的焦慮和鬥爭,我找到了解決這個漏洞的方法。它從字面上全部歸結爲這一行:

ActionMailer::Base.delivery_method = :smtp 

在我的application.rb配置文件中。

它應該是:

config.action_mailer.delivery_method = :smtp 

我不知道我是怎麼弄錯了,但男孩沒有它在我的應用程序肆虐。

有誰知道爲什麼會造成這樣的問題?我在每個查詢中丟失了大約一兆字節的內存。瘋。

+1

感謝你,你可能只是救了我一些嚴重的頭痛。 – tyler

+1

你是怎麼解決這個問題的?我的Rails應用程序讓Strings變得像瘋了一樣,我不知道如何跟蹤創建它們的內容。 –

+2

@MihaRekar很糟糕。我實際上必須通過幾個月的提交,加載和引導每個提交,然後用Apache基準測試工具請求服務器,直到找到沒有任何問題的修訂。然後,我逐塊刪除每個變化,直到找到使泄漏停止的那個。花了幾天。 –