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

上个星期,把之前弄的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 文件

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python内存泄露是指在程序存在未释放的内存空间问题导致内存持续增长,最终可能导致程序崩溃或性能下降。下面是一些常见的查找解决Python内存泄露问题方法: 1. 使用内存分析工具:可以使用第三方库如`heapy`或`pympler`等进行内存分析。这些工具可以帮助你查看程序的对象、内存使用情况和引用关系,从而找到可能导致内存泄露的原因。 2. 检查引用计数:Python的内存管理是基于引用计数的,当一个对象没有引用时,会被垃圾回收机制自动回收内存。因此,检查对象的引用计数是否正常是查找内存泄露的一种方法。 3. 检查循环引用:在Python,如果两个对象互相引用,而没有其他对象引用它们,那么这种情况下的内存就无法被垃圾回收机制回收,出现内存泄露。因此,需要检查代码的循环引用问题,及时解除这些引用。 4. 检查资源释放:有些资源在使用后需要手动释放,比如打开的文件、数据库连接等。如果在使用完毕后没有及时关闭或释放,就会造成资源泄露,进而导致内存泄露。因此,务必确保在使用完毕后进行适当的关闭或释放操作。 5. 减少不必要的缓存:缓存常常是提高程序性能的手段,但是过多的缓存可能会导致内存占用增加。因此,需要评估和控制缓存数据的大小,避免不必要的数据缓存。 总之,查找解决Python内存泄露问题需要使用工具进行内存分析,检查引用计数和循环引用,确认是否释放资源,以及减少不必要的缓存。通过这些方法,可以有效地定位内存泄露问题,并采取相应的措施加以解决

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值