分享好友 最新动态首页 最新动态分类 切换频道
python内存泄露的原因_python内存泄露排查
2024-12-28 12:19

最近线上某台虚拟机隔三差五就会挂掉,通过业务日志基本上排查到每次出错都源于某一个请求。于是对该请求展开排查。

python内存泄露的原因_python内存泄露排查

1,先确认罪魁祸首

执行该请求之前之前的虚拟机memory和python进程占用的资源

执行一次该请求之后的资源占用情况

python占用的资cpu在服务执行过程中会有所提升,但是请求结束后,cpu可以恢复到执行之前的水平;而VIRT,RES,内存占比却有显著提升,且执行完成后并未下降。多次执行,内存占用累积上涨。由此推断,罪魁祸首是该请求,并且可能是由内存泄露引起的。

2,python内存泄露的工具

通过网上一系列的查找,了解到用于排查python内存泄露的工具有:objgraph,pympler,guppy

objgraph

可以查看对象被引用次数的工具,也可以查看对象调用图。

这里主要用到的方法

show_most_common_types()

show_growth()

个人觉得show_growth更好用写,可以看到增量数据。

pympler

pympler工具可以很容易看到内存的使用情况

guppy

guppy可以查看到heap内存的具体使用情况,哪些对象占用多少内存

3,代码定位

先写一个记录对象引用次数的方法

import os

import objgraph

def obj_graph_stat(mark=''): file_path = r'D:obj_graph.txt' if not os.path.exists(file_path): file = open(file_path, 'w') file.close() file = open(file_path, 'a') file.write(f'******************{str(now_datetime())}-{mark}****************** ') objgraph.show_most_common_types(limit=20, file=file) file.write(f'-'*20) file.write(' ') # 返回heap内存详情 # heap = hp.heap() # byvia返回该对象的被哪些引用, heap[0]是内存消耗最大的对象 # references = heap[0].byvia # file.write(str(references)) file.write(' ') file.close()

把该方法放在可疑代码前后执行

通过前后执行对比发现引用list,dict等对象均有较大增加。然后对代码进行走读,逐步缩小范围,对可疑代码段进行前后对比,确定最小范围

同时对象引用的前后对比也佐证了这一点,如上图。该段代码是基于matplotlib.pyplot绘制一个曲线图,对代码主题功能不影响不是很大,我们先把该段代码注释掉,再次执行看对象前后引用次数。

通过对比,发现对象引用次数正常了

在服务器部署执行后,对比top信息,执行前

执行中

执行后

执行完成后内存恢复到执行前相当的水平,问题迎刃而解

4,刨根问底

抓到真凶后,我们总归是好奇,想知道真相的。通过度娘我们发现

利用matplotlib绘制图片,并且将图片保存到文件中。因为没有及时的将内存中的图像清除,致使内存爆表,系统卡死。

pyplot是一个模块,它收集了一些允许matplotlib以功能方式使用的函数。 我在这里假设pyplot已被导入为“import matplotlib.pyplot as plt”。 在这种情况下,有三个不同的命令可以删除内容

plt.cla()清除轴,当前活动轴在当前图中。 它保持其他轴不变。

plt.clf()清除整个当前数字。与所有的轴,但离开窗口打开,这样它就可以再用在其他的 plots上了。

plt.close()关上窗户,如果未另指定,则该窗口将是当前窗口。

因此,哪种功能最适合您,取决于您的用例。

close()函数还允许指定哪个窗口应该关闭。参数可以是使用figure(number_or_name)创建的窗口的数字或名称。也可以是获得的图形实例,即使用fig = figure()。如果没有人提出任何论点close(),当前活动的窗口将关闭。 此外,还有语法close('all'),它关闭所有数字。

总结经验,也就是我们在使用matplotlib.pyplot时,需要在后面追加一个释放操作。

总体来说这是一次由于经验不足导致的犯错,最终解决方法不复杂,但是重在问题排查的过程和方法,学到了很多。

文章来源: segmentfault.com,作者:ChristmasBoy,版权归原作者所有,如需转载,请联系作者。

最新文章
汉邦高科跌4.60%,成交额1.10亿元,近5日主力净流入-1983.23万
12月17日,跌4.60%,成交额1.10亿元,换手率4.43%,总市值32.16亿元。根据AI大模型测算汉邦高科后市走势。短期趋势看,连续3日被主力资金减仓。主力没有控盘。中期趋势方面,下方累积一定获利筹码。近期该股有吸筹现象,但吸筹力度不强。舆
高清美女写真生成器——探索AI绘画的魅力与技巧
在这个数字化的时代,AI技术已经深入到我们生活的各个角落。而谈到AI绘画,不得不提的是超逼真的美女写真生成工具,它们不仅能够帮助人们创作出令人惊叹的艺术作品,还有着极高的操作简便性和趣味性。但,你是否曾想过,AI生成的美女写真究
随着使用量增长 搜索引擎Ecosia提高植树计数器的速度
搜索引擎Ecosia已经宣布,它的主页上的植树计数器已经加快,以反映公司每0.8秒就可种植一棵树而不是每1.1秒。如果你之前没有听说过这个搜索引擎,因为它与谷歌相比相当小,但外界对其对兴趣正在增加,因为它将利润转化为植树,而不是向其所
河津计量器具效验-测量工具计量校正-安全省心<2025排名一览>
河津计量器具效验-测量工具计量校正-安全省心本公司校准校验实验室可针对电子电器厂、电气、鞋厂、五金厂、塑胶厂、橡胶厂、纸品厂、化工厂、玩具厂、生物制药等各行业使用的仪器进行仪器校正.计量器具效验是确保测量结果准确可靠的重要环
纳米材料基本概念、内涵与粒度分析.ppt
纳米材料基本概念、内涵和粒度分析;;介观领域:在宏观领域和微观领域之间,存在着一块近年来才引起人们极大兴趣和有待开拓的“处女地”,三维尺寸都很细小,出现了许多奇异的崭新的物理性能。1959年,著名理论物理学家、诺贝尔奖获得者费曼
鸡西爱采购开户费是多少
这些是做好爱采购产品排名的必要条件,可能在百度爱采购刚上线的那段时间,由于百度爱采购算法的不太完善,随便发发都是可以有好的排名,但是现在百度爱采购上线的时间也很长的一段时间了,如果我们还按照之前的产品发布方式来发布产品信息
邵阳地区搜索引擎关键词优化策略揭秘,品牌脱颖而出之道
邵阳地区优化关键词策略全解析,助您品牌在搜索引擎中独树一帜。本文深入剖析关键词优化技巧,提供实用策略,助您提升品牌曝光度和搜索排名。掌握这些技巧,让您的品牌在激烈的市场竞争中脱颖而出。随着互联网的快速发展,搜索引擎已经成为
S8最新固件升级,全新体验与改变揭秘
摘要:最新S8固件升级带来了全新的体验与改变。升级后的系统性能更加优化,用户体验更加流畅,功能更加丰富多样。固件升级解决了之前版本存在的问题,提高了设备的稳定性和安全性。用户将享受到更快的运行速度、更智能的操作体验以及更多创
谷歌Jules新AI助手震撼来袭,程序员从此告别烦恼
谷歌最近公布了一款令人瞩目的新工具——实验性AI代码助手“Jules”,这一消息无疑在开发者圈内引起了热烈反响。Jules的推出,标志着谷歌在提升开发者工作效率方面迈出了重要一步。很多程序员在看到这个消息的第一反应是不是在想:这次真的
怎么把店铺加到地图
2024年01月14日吴经理100地图标注 , 地图定位 , 导航地图标记网络技术服务;信息技术咨询服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;日用百货销售;化妆品零售;互联网销售(除销售需要许可的商品);化妆品批发;服
相关文章
推荐文章
发表评论
0评