如何除錯Python 程式的記憶體洩露問題

2022-10-08 18:21:17 字數 1409 閱讀 8620

如果大家在 linux 或者 macos 下面執行一段可能導致記憶體洩露的程式,那麼你可能會看到下面這樣的情況:

而如果你用的系統是 windows,那麼可能電腦直接就卡死了。

但是,除錯這種 oom(out of memory)的問題有時候是非常困難的,因為你不知道**哪個地方會導致記憶體洩露。但是如果你執行程式進行除錯,程式又會中途被殺掉或者直接卡死系統。

如果我們有辦法看到程式裡面每乙個函式占用的記憶體大小,那麼我們就能縮小檢查的範圍。

為了實現這個目的,我們可以安裝並使用乙個叫做filprofiler的第三方庫,它可以分析 python 程式的記憶體占用情況。

pip install filprofiler

def

func_a():

print('

我是乙個正常的函式')

deffunc_b():

print('

我是第二個正常的函式')

deffunc_b():

print('

我是第三個正常的函式')

deffunc_oom():

print('

我是乙個會導致記憶體洩露的函式')

datas =

while

true:'s

' * 1024 * 1024)

print('

執行程式的時候,你不會看到這一行')

defrun():

func_a()

func_b()

func_oom()

run()

這段程式直接執行會因為記憶體洩露的問題被系統直接殺死。

在使用filprofiler之前,還需要調整一下虛擬記憶體的大小。否則,filprofiler本身也會因為占用記憶體過大的問題而被系統殺掉。

系統可用記憶體為1619456 kb

filprofiler 會在當前資料夾下面生成乙個fil-result資料夾,在裡面會有乙個以時間命名的資料夾,資料夾中會有兩個svg檔案,如下圖所示:

除錯記憶體 C C 程式除錯和記憶體檢測

程式出現錯誤很正常,乙個優秀的程式設計師必須學會除錯,發現錯誤並改正。減少程式錯誤最有效的方法是 在敲 之前,多花點時間思考,如何構造程式,資料結構和演算法,盡量把細節提前寫下來,可以嘗試著在紙上寫出核心 這樣可以減少今後修改 的時間。1 檢查,重新閱讀程式,排除比較明顯的錯誤。編譯時帶上 wall...

Python 程式如何高效地除錯?

python在debug方面的支援還是不錯的,在明確 意義的情況下,通過log print和assert分析錯誤原因,配合單元測試可以很高效。然而,實際工作中大量 很可能出自他人之手,這種情況下,使用debugger就顯得更加高效了。一 在控制台下進行程式除錯 pdb如果你熟悉命令列除錯工具 例如g...

如何使用repr除錯python程式

一般除錯程式的時候都比較傾向print,利用直接列印的方法作出判斷,但是print只能列印出結果,對型別無法作出判斷。例如 複製 a 5 b 5 print a print b 結果為 55 複製 對於a和b從表面看是一樣的,可能就會預設為a b 實則a為int型別,b為string型別 再用rep...