我在Heroku上有一個Rails 3.2 Ruby 1.9應用程序,它工作正常。我升級到2.1的Ruby和Rails 4.1,並很快開始越來越內存錯誤:如何升級Ruby和Rails後診斷內存泄漏?
錯誤R14(內存超出配額)
我設置的Heroku的選項,以顯示內存使用情況。這表明越來越多的應用隨着時間的推移,但目前還不清楚爲什麼:
源= web.1賽道= heroku.12 ...樣品#memory_total = 514.44MB樣品#memory_rss = 449.46MB樣品#memory_cache = 0.52MB樣品#memory_swap = 64.46MB樣品#memory_pgpgin = 142709pages樣品#memory_pgpgout = 27516pages
我看着對象空間看哪些類具有最實例和得到了以下結果頂部:
[模塊,1232],[MIME :: Type,1643],[Regexp,2334],[Hash,3002],[Class,3004],[Pr α,3363],[RubyVM ::的Env,3416],[陣列,25436],[RubyVM :: InstructionSequence,26490],[字符串,127601]
似乎有是一個非常大的數量的字符串,但我不確定通常會有多少人。我運行了ObjectSpace.garbage_collect
,它將字符串減少了47485個實例,並影響了許多其他類的實例計數,例如:T_ARRAY(-16308)和:T_NODE(-19508)。
以上是否意味着String對象是泄漏的來源?我應該如何診斷它呢?
更新:
我安裝了哼寶石來獲得額外的內存信息,並運行它在一塊原木。然而,它只是顯示的一切,用一噸的記憶:
- 總結 -
最差的要求:
70748 KB,靜#家
70748 KB,部分#顯示
40664 KB ,頁面顯示#
這也說明創建活動記錄的數量:
- 摘要 -
最差的要求:
1569,靜態#家
829,部分#顯示
817頁#表明
所以這是一個一般的內存泄漏,但我怎麼能找到呢?
我懷疑問題是new_relic。我將等待確認。 –
其實它是Ruby 2.1。 –