首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python内存泄漏追踪?

Python内存泄漏追踪?
EN

Stack Overflow用户
提问于 2011-07-24 21:44:37
回答 1查看 1.4K关注 0票数 7

不知何故,我的Python程序在运行时会占用越来越多的内存( VIRT和RES) "top“命令的列不断增加。

然而,我非常仔细地仔细检查了我的代码,我确信没有内存泄漏(没有使用任何字典,没有全局变量。这只是一个main方法多次调用子方法)。

我使用heapy来分析我的内存使用情况

代码语言:javascript
运行
AI代码解释
复制
from guppy import hpy;
heap = hpy();
.....
print heap.heap();

每次main方法都会调用sub方法。令人惊讶的是,它总是给出相同的输出。但是内存使用量一直在增长。

我想知道我是否没有正确使用heapy,或者"top“命令中的VIRT和RES并没有真正反映我的代码使用的内存?

或者,是否有人能提供更好的方法来跟踪Python脚本中的内存使用情况?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-25 14:39:51

两种可能的情况:

  • 您的函数是纯Python,在这种情况下,可能的原因包括

代码语言:javascript
运行
AI代码解释
复制
- you are storing an increasing number of large objects
- you are having cycles of objects with a `__del__` method, which the gc won't touch

我建议使用gc模块以及gc.garbagegc.get_objects函数(请参阅http://docs.python.org/library/gc.html#module-gc)来获取现有对象的列表,然后您可以通过查看每个对象的__class__属性来检查它们,以获取有关对象类的信息。

  • 你的函数至少有一部分是用C/ C++编写的,在这种情况下,问题可能出在C/ case代码中。上面的建议仍然适用,但不能看到所有的泄漏:您将看到由于错过对PY_DECREF的调用而导致的泄漏,但不会看到没有相应释放的低级C/C++分配。为此,您将需要valgrind。有关该主题

的详细信息,请参阅this question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6809947

复制
相关文章
python 内存泄漏
程序运行时都需要在内存中申请资源用于存放变量,python 在处理内存中的变量时会调用垃圾回收机制,会留心那些永远不会被引用的变量并及时回收变量,删除并释放相关资源。
为为为什么
2022/08/09
2.8K0
python 内存泄漏
内存泄漏
这个笔记是记录一下,关于内存泄漏的知识,之前我们就知道了,如果要用堆必须要释放堆的内存,如果不释放会产生很多的内存垃圾和碎片,影响系统运行效率,甚至出错。
用户7272142
2023/10/11
3400
内存泄漏
leakCanary 内存泄漏
当jvm进行垃圾回收时,无论内存是否充足,如果该对象只有弱引用存在,那么该对象会被垃圾回收器回收,同时该引用会被加入到关联的ReferenceQueue。因此程序通过判断引用队列中是否已经包含指定的引用,来了解被引用的对象是否被GC回收(引用队列存在指定的弱引用,说明对象被回收)
花落花相惜
2021/12/15
1.6K0
内存泄漏测试方法及其python实现
  本文提供了一种轻巧的内存泄漏测试方法及其python实现,该方法在Lenovo Bamboo系统的验收测试活动中得到过诸多检验,是一种易用有效的内存泄漏测试方法。
顾翔
2019/12/12
1.8K0
内存泄漏测试方法及其python实现
jvm内存泄漏
Runtime.getRuntime().freeMemory()表示当前还有多少空闲内存
全栈程序员站长
2022/08/23
1.6K0
jvm内存泄漏
内存泄漏漫谈
对于C/C++来说,内存泄漏问题一直是个很让人头痛的问题,因为对于没有GC的语言,内存泄漏的概率要比有GC的语言大得多,同时,一旦发生问题,也严重的多,而且,内存泄漏的排查往往十分困难。对于内存泄漏,维基百科的定义是:在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。内存泄漏的原因通常情况下只能由程序源代码分析出来。如果一个程序存在内存泄
腾讯移动品质中心TMQ
2018/02/06
2.6K0
内存泄漏漫谈
Android 内存泄漏
内存泄漏(Memory Leak):是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
Yif
2019/12/26
1.9K0
内存泄漏分析
在内存映像文件导出中详细的介绍了当应用程序出现内存泄露的时候自动导出内存映像文件。在实际的生产环境中主要是使用jamp通过命令行的模式来导出内存镜像文件,下面详细的阐述下这个过程。
无涯WuYa
2022/12/03
1.9K0
内存泄漏分析
java内存泄漏
一般来说,内存泄漏有两种情况,一种情况如在C/C++语言中的,在堆中分配的内存在没有将其释放掉的时候,就将其所有能访问这块内存的方式都删除掉(如,指针重新赋值)。这种情况就像,占着地儿,别人还没办法引用,又没释放空间,内存泄漏。
MickyInvQ
2020/09/27
1.5K0
NSURLSession内存泄漏
检查代码是否有leak的时候,发现NSURLSession存在leak,最后发现必须session请求完成后,立即释放,代码如下: - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{ [session finishTasksAndInvalidate]; }
czjwarrior
2018/05/28
2.2K0
JavaScript内存泄漏
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
张炳
2019/08/02
1.4K0
JavaScript内存泄漏
golang 内存分析/内存泄漏
进入交互式模式之后,比较常用的有 top、list、traces、web 等命令。
ppxai
2020/09/23
9.2K0
内存泄漏和内存溢出
b)创建匿名内部类的静态对象 c)未关闭资源 d)长时间存在的集合容器中创建生命周期短的对象
名字是乱打的
2022/05/13
3.3K0
内存溢出和内存泄漏
通俗的讲就是设备内存不够了。就好比我们的手机,运行内存是4G的,当我们运行了太多的程序时,在运行其他的软件时就会很卡或者提示xx运行停止。
兔云小新LM
2019/07/22
3.2K0
内存溢出和内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。 内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费
在水一方
2022/06/14
3.1K0
内存泄漏定位
编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足够的内存分配给对象,这时候就会导致内存溢出。
muntainyang
2020/09/28
1.7K0
内存泄漏定位
CMFCButton内存泄漏
VS10未打补丁的版本,CMFCButton绑定控件存在内存泄漏,查看MSDN手册
sofu456
2019/07/09
1.2K0
CMFCButton内存泄漏
JAVA NIO内存泄漏
前言 写NIO程序时,经常使用ByteBuffer来读取写入数据,那使用ByteBuffer.allocate()还是ByteBuffer.allocateDirect分配呢? allocate()分配的是jvm堆内存,属于GC管理范畴,需要堆内拷贝,速度较慢。 allocateDireact()直接分配堆外内存,属于OS范畴,没有GC管理,速度较快。 我们希望使用速度更快的方式,但是没有GC管理会产生OOM的问题。 好在OS内存在java中有个DirectByteBuffer与之对应,当GC发生时,这个类
春哥大魔王
2018/04/16
1.8K0
剑指内存泄漏
指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,失去了对该段内存的控制,因而造成了内存的浪费。一般我们常说的内存泄漏是指堆内存的泄漏,堆内存使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,必须负责调用free或delete释放相应的内存。
audy
2019/02/13
1.3K0
剑指内存泄漏
浅谈Golang内存泄漏
内存泄漏并不是指物理上的内存消失,而是在写程序的过程中,由于程序的设计不合理导致对之前使用的内存失去控制,无法再利用这块内存区域;短期内的内存泄漏可能看不出什么影响,但是当时间长了之后,日积月累,浪费的内存越来越多,导致可用的内存空间减少,轻则影响程序性能,严重可导致正在运行的程序突然崩溃。
素履coder
2022/10/05
2.6K0
浅谈Golang内存泄漏

相似问题

追踪cocoa内存泄漏

22

Android如何追踪内存泄漏?

10

如何追踪COM内存泄漏

21

无法追踪的AFNetworking内存泄漏

110

追踪JavaScript内存泄漏的工具

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文