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)的变量循环引用。