如果大家在 Linux 或者 macOS 下面运行一段可能导致内存泄露的程序,那么你可能会看到下面这样的情况:

而如果你用的系统是 Windows,那么可能电脑直接就卡死了。

但是,调试这种 OOM(Out of Memory)的问题有时候是非常困难的,因为你不知道代码哪个地方会导致内存泄露。但是如果你运行程序进行调试,程序又会中途被杀掉或者直接卡死系统。

如果我们有办法看到程序里面每一个函数占用的内存大小,那么我们就能缩小检查的范围。

为了实现这个目的,我们可以安装并使用一个叫做filprofiler的第三方库,它可以分析 Python 程序的内存占用情况。

我们先安装这个库:pip install filprofiler

然后写一段会导致内存泄露的代码:def func_a():print('我是一个正常的函数')def func_b():print('我是第二个正常的函数')def func_b():print('我是第三个正常的函数')def func_oom():print('我是一个会导致内存泄露的函数')datas = []while True:datas.append('s' * 1024 * 1024)print('运行程序的时候,你不会看到这一行')def run():func_a()func_b()func_oom()run()

这段程序直接运行会因为内存泄露的问题被系统直接杀死。

在使用 filprofiler 之前,还需要调整一下虚拟内存的大小;否则,filprofiler 本身也会因为占用内存过大的问题而被系统杀掉。

先使用free命令看一下系统可用的内存有多少:系统可用内存为1619456 KB

我们使用ulimit命令,把程序能够使用的内存稍稍调低一些,这样即使被占满,也不会被系统杀死:ulimit -Sv 1600000

然后,使用 filprofiler 来运行这个程序:fil-profile run test.py

运行效果如下图所示:

filprofiler 会在当前文件夹下面生成一个fil-result文件夹,在里面会有一个以时间命名的文件夹,文件夹中会有两个svg文件,如下图所示:

我们使用浏览器打开其中的out-of-memory.svg文件,可以看到如下图所示的内存占用图:

从图中可以看到,占用内存最大的函数是func_oom,程序也是在这个地方崩溃的。

python的内存泄露_Python 程序的内存泄露,教你一招来解决?相关推荐

  1. python的内存管理_python如何管理内存?

    介绍 内存管理是有效分配,重新分配和协调内存的过程,以便所有不同的进程都能平稳运行并可以最佳地访问不同的系统资源.内存管理还涉及清除不再访问的对象的内存. 在Python中,内存管理器通过定期运行以清 ...

  2. python语言不用编译_python程序不需要编译吗

    python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的 机器语言,经过 ...

  3. 小程序服务器内存要求,小程序服务器内存需要多大

    小程序服务器内存需要多大 内容精选 换一换 弹性伸缩服务可根据用户的业务需求,通过策略自动调整其业务的资源.具有自动调整资源.节约成本开支.提高可用性和容错能力的优势.适用以下场景:访问流量较大的论坛 ...

  4. plc与python哪个前景好_Python程序猿哪种就业方向前景最好?

    python简介: Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比 ...

  5. 玩游戏4g计算机的内存不足,别再说内存不足了!教你一招彻底解决,电脑运行加速3倍!...

    内存不足?! 想必许多朋友使用了比较久或者配置相对比较低的电脑,都出现过这个问题,而大白菜那台服役4年的电脑,也是频频发出警告"内存不足"!真是心累呀~ 那么如何才能够解决电脑内存 ...

  6. 计算机内存运算太低,别再说内存不足了!教你一招彻底解决,电脑运行加速3倍!...

    内存不足?! 想必许多朋友使用了比较久或者配置相对比较低的电脑,都出现过这个问题,而小电那台服役4年的电脑,也是频频发出警告"内存不足"!真是心累呀~ 那么如何才能够解决电脑内存不 ...

  7. python的内存机制_python中的内存机制

    首先要明白对象和引用的概念 (例子:a=1, a为引用,1为对象,对象1的引用计数器为1,b=1此时内存中只有一个对象1,a,b都为引用,对象的引用计数器此时为2,因为有两个引用) a=1,b=1id ...

  8. python 内存优化_Python 黑魔法之内存优化

    本文字数:2634 字 阅读本文大概需要:7 分钟 写在之前 围绕类的话题,说是说不完的,仅在特殊方法,除了我们在前面遇到过的 __init__(),__new__(),__str__() 等之外还有 ...

  9. c python 内存冲突_Python在计算内存时应该注意的问题?

    我之前的一篇文章,带大家揭晓了 Python 在给内置对象分配内存时的 5 个奇怪而有趣的小秘密.文中使用了sys.getsizeof()来计算内存,但是用这个方法计算时,可能会出现意料不到的问题. ...

最新文章

  1. Android Studio 3.5 之后导入第三方Library 库的方法
  2. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
  3. 【noi 2.5_7834】分成互质组(dfs)
  4. 【Windows 逆向】OD 调试器工具 ( OD 工具简介 | OD 工具与 CE 工具对比 )
  5. eclipse里没有project facets
  6. 数据结构 - 赫夫曼树
  7. Android学习指南
  8. 论文浅尝 | SMBOP: Semi-autoregressive Bottom-up Semantic Parsing
  9. 外设驱动库开发笔记24:FM24xxx系列FRAM存储器驱动
  10. navicat mysql 远程_Navicat for mysql 连接远程数据库
  11. Unable to instantiate default tuplizer
  12. 求素数--筛选法和打表
  13. MyBatis基于Java API配置
  14. python,opencv利用自适应阈值分割法实现微滴图像分割并计数
  15. 一名优秀项目经理需具备的五种基本素质及八大管理技能
  16. 三国志·魏书·田豫传
  17. 云服务器被恶意ddos攻击了怎么办?
  18. xeon e5-2400 系列处理器能做四路服务器吗?,至强处理器E5-2400系列双路云服务器推出...
  19. 政策热市场冷 中国新能源汽车遇尴尬
  20. 4-AT命令交互之-COPS选择营运商

热门文章

  1. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御
  2. MapReduce 示例:减少 Hadoop MapReduce 中的侧连接
  3. 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
  4. 一文搞懂*argv和**kwargs
  5. iphone7测试软件,iPhone7如何测试网速 ping命令测试网速方法介绍
  6. GLTF格式——关系描述
  7. 基于Matlab的跨孔CT胖射线追踪算法(五)
  8. carla安装之clang版本问题
  9. 用Python批量修改图片名称(后缀)
  10. 2017年全国大学生电子设计竞赛滚球控制系统设计