日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何調(diào)試Python程序的內(nèi)存泄露問(wèn)題

如果大家在 Linux 或者 macOS 下面運(yùn)行一段可能導(dǎo)致內(nèi)存泄露的程序,那么你可能會(huì)看到下面這樣的情況:

 

而如果你用的系統(tǒng)是 Windows,那么可能電腦直接就卡死了。

但是,調(diào)試這種 OOM(Out of Memory)的問(wèn)題有時(shí)候是非常困難的,因?yàn)槟悴恢来a哪個(gè)地方會(huì)導(dǎo)致內(nèi)存泄露。但是如果你運(yùn)行程序進(jìn)行調(diào)試,程序又會(huì)中途被殺掉或者直接卡死系統(tǒng)。

如果我們有辦法看到程序里面每一個(gè)函數(shù)占用的內(nèi)存大小,那么我們就能縮小檢查的范圍。

為了實(shí)現(xiàn)這個(gè)目的,我們可以安裝并使用一個(gè)叫做filprofiler的第三方庫(kù),它可以分析 Python 程序的內(nèi)存占用情況。

我們先安裝這個(gè)庫(kù):

 
 
 
 
  1. pip install filprofiler 

然后寫(xiě)一段會(huì)導(dǎo)致內(nèi)存泄露的代碼:

 
 
 
 
  1. def func_a(): 
  2.     print('我是一個(gè)正常的函數(shù)') 
  3.  
  4. def func_b(): 
  5.     print('我是第二個(gè)正常的函數(shù)') 
  6.  
  7. def func_b(): 
  8.     print('我是第三個(gè)正常的函數(shù)') 
  9.  
  10. def func_oom(): 
  11.     print('我是一個(gè)會(huì)導(dǎo)致內(nèi)存泄露的函數(shù)') 
  12.     datas = [] 
  13.     while True: 
  14.         datas.append('s' * 1024 * 1024) 
  15.     print('運(yùn)行程序的時(shí)候,你不會(huì)看到這一行') 
  16.  
  17.  
  18. def run(): 
  19.     func_a() 
  20.     func_b() 
  21.     func_oom() 
  22.  
  23.  
  24. run() 

這段程序直接運(yùn)行會(huì)因?yàn)閮?nèi)存泄露的問(wèn)題被系統(tǒng)直接殺死。

在使用filprofiler之前,還需要調(diào)整一下虛擬內(nèi)存的大小。否則,filprofiler本身也會(huì)因?yàn)檎加脙?nèi)存過(guò)大的問(wèn)題而被系統(tǒng)殺掉。

先使用free命令看一下系統(tǒng)可用的內(nèi)存有多少:

系統(tǒng)可用內(nèi)存為1619456 KB

我們使用ulimit命令,把程序能夠使用的內(nèi)存稍稍調(diào)低一些,這樣即使被占滿,也不會(huì)被系統(tǒng)殺死:

 
 
 
 
  1. ulimit -Sv 1600000 

然后,使用 filprofiler 來(lái)運(yùn)行這個(gè)程序:

 
 
 
 
  1. fil-profile run test.py 

運(yùn)行效果如下圖所示:

 

filprofiler 會(huì)在當(dāng)前文件夾下面生成一個(gè)fil-result文件夾,在里面會(huì)有一個(gè)以時(shí)間命名的文件夾,文件夾中會(huì)有兩個(gè)svg文件,如下圖所示:

 

我們使用瀏覽器打開(kāi)其中的out-of-memory.svg文件,可以看到如下圖所示的內(nèi)存占用圖:

 

從圖中可以看到,占用內(nèi)存最大的函數(shù)是func_oom,程序也是在這個(gè)地方崩潰的。


網(wǎng)站題目:如何調(diào)試Python程序的內(nèi)存泄露問(wèn)題
本文地址:http://www.dlmjj.cn/article/dhcisjc.html