2011-09-02 55 views
1

我有一個長時間運行的rake任務,隨着時間的推移吞噬了我所有的系統內存?追蹤我的問題並達到最低點的最快方法是什麼?rake任務內存泄漏

進出口使用導軌2.3.5,1.8.7紅寶石,Ubuntu的上slicehost和MySQL 5

我有Rails應用程序工作正常。我有一個夜間工作,整夜運行,並做了大量的工作(一些外部調用Twitter,谷歌等,並使用活動記錄大量的數據庫調用,隨着時間的推移,這項工作增長的內存大小接近4演出。爲什麼耙子任務沒有釋放memeory

我開始尋找bleak_house,但它看起來很複雜,並沒有在一年內更新,我無法在本地工作,所以我不願意嘗試在生產中。

感謝 喬爾

回答

1

投擲了兩個想法。首先,如果你是循環,因爲這工作的一部分,確保你不會持有到引用您不需要對象,這將阻止他們被收集。如果你完成了,將它們從陣列中移除,或者其他任何東西。另外,把一個定期的GC.start放到你的循環中,作爲一種方法來看看它是不是隻是在GC上進行。

第二個想法是ruby不包含GC符號,因此如果您的API客戶端將值存儲爲符號,您可能會得到一個巨大且不斷增長的符號集,這些符號將永遠不會被重用。符號很小,但小東西仍然可以加起來。

當然,不要加載超過您需要的對象。使用#find_each可以批量加載AR對象,如果必須迭代大量AR對象。

+0

謝謝,我認爲AR關係是我的問題,好像有幾個工具在那裏,但沒有什麼是很容易使用,我發現。 – Joelio