Python 内存泄露问题,详细讲解如何查找问题以及解决方法

本文详细探讨了Python项目中由于TensorFlow模型加载导致的内存泄露问题,通过内存分析库memory_profiler定位问题,并提出使用单例类来确保进程只需加载一次模型,从而解决内存持续增长的问题。在实践中,这种方法显著减少了内存消耗,避免了服务器宕机的风险。
摘要由CSDN通过智能技术生成

上个星期,把之前弄的tensorflow项目部署到线上,真正开始进行评测的时候,发现了还是会有一些问题,而且这些问题还是相对比较严重的,在这里我就先给大家分享一下model_from_json造成的内存泄露问题,以及怎么解决的。

一、背景

在我的一篇博客中,写了关于tensorflow训练完后model的保存以及借助redis加载到内存形成分并发调用,并且在对模型进行更新的时候只需要更新一台机器即可,有加快模型调用以及方便的作用。
感兴趣的可以先去看看我的这篇博客。
https://editor.csdn.net/md/?articleId=106159583

但是在真正部署到线上运行的时候,发现其中一个问题。
服务器内存监控如下:
在这里插入图片描述
是的,可以看到从12点那里部署上线后,内存就在不断升高,到达峰值后又会清除掉部分内存,但是也不能使得内存完全降下来。
这在服务中是比较严重的情况了,内存爆了很容易服务器就宕机了。影响这台机器上面的所有业务。
所以遇到这个问题必须想办法解决,不解决就没办法上线。

在这里顺便跟大家分享一下怎么查找消耗内存的方式。(这个也是我老大教了我一下)

二、寻找原因

1、借助内存分析库 memory_profiler
from memory_profiler import profile
@profile(precision=4, stream=open('memory_profiler.log', 'w+'))
def process():
	pass

参数含义:precision:精确到小数点后几位
stream:此模块分析结果保存到 ‘memory_profiler.log’ 日志文件。如果没有此参数,分析结果会在控制台输出。

2、看逻辑代码,因为是对量比较大的数据进行模型预测,所以第一步想的就是 可能是中间数据来不及释放导致的内存泄露。

于是就在代码末尾加入了python回收机制gc,手动回收。

del data,c_data
gc.collect()

看看代码执行后生成的memory_profiler.log 文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值