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)的變量循環引用。