記錄一次內存泄漏的修復過程

1、現象

通過Flask API請求調用一個實例的方法,加載pysparnn的索引,每次調用都增加800M,懷疑內存泄漏。

2 、工具

memory_profiler,    pympler

momery_profiler 使用:

這樣每次調用的話,可以知道每一行代碼調用是否增加了內存。

from memory_profiler import profile

@profile
def obj_fun():
    print('here')
    """
     this is your function code
     """

pympler的使用:

from pympler import tracker,summary,muppy
memory_tracker = tracker.SummaryTracker()

# 在你運行完你的方法後使用這一句代碼
memory_tracker.print_diff()

如果有內存泄漏,那麼結果是一些dict,list大於零。

3、結論:

python 用pickle保存對象和加載對象,貌似這會內存泄漏,其實不會泄漏。

最後結論是用pickle導入對象時候,是第三方庫泄漏的內存。

泄漏內存的元兇,是第三方庫(pysparnn)的變量循環引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章