2014-01-20 78 views
2

我有一個Python程序,開始吃大量的RAM。問題在於它已經工作了大約2天沒有問題,但突然開始吃了大量的RAM。劇本很大,很難理解那裏發生的事情。調試內存消耗已運行腳本的泄漏

有什麼辦法可以附加到正在運行的進程並轉儲一些關於對象的信息嗎?因此,我將能夠理解那裏發生了什麼。

我用一些Python模塊是,它報告了我一些數據這樣的:

Strings: 4567, total memory: 45MB 
Lists: 32, total memory: 12MB 
Dicts: 1, total memory: 1MB 
... 

當然,這只是一個想法 - 任何內存相關的報告表示讚賞。

我發現唯一的工作解決方案來調試正在運行的進程:gdb。但我根本不熟悉它。

請注意,我不想更改代碼,導入pdb,重新啓動腳本等 - 否則我必須再等兩天。

謝謝!

+0

您可以使用'-p'附加到進程。你甚至可以使用'ltrace' /'strace'來獲得內存分配。例如,請參閱http://techblog.rosedu.org/tags/debugging.html –

+0

中的帖子@MihaiMaruseac謝謝 – Spaceman

回答

2

在基於glibc的系統上,您可以使用gdb-heap擴展來檢查正在運行的進程的堆。 gdb-heap知道一些關於Python如何進行內存管理的知識。請參閱:https://fedorahosted.org/gdb-heap/