Python guppy所说的长期运行项目的奇怪内存消耗
我有一个长期运行的Python项目,它在内存使用方面有一个缓慢但永久的增量。如果主脚本接收到大量要处理的工作,并且主进程和子进程都无限运行(或者直到删除目标作业),则主脚本将设置新进程(使用多进程) 为了试图了解内存泄漏的来源,我使用了Python guppy所说的长期运行项目的奇怪内存消耗,python,memory,memory-leaks,guppy,Python,Memory,Memory Leaks,Guppy,我有一个长期运行的Python项目,它在内存使用方面有一个缓慢但永久的增量。如果主脚本接收到大量要处理的工作,并且主进程和子进程都无限运行(或者直到删除目标作业),则主脚本将设置新进程(使用多进程) 为了试图了解内存泄漏的来源,我使用了guppy模块来分析我的内存,然后每两分钟进行一次将内存分析写入文件的处理 在检查内存配置文件时,我看到内存中只有一种类型在增加-list。其余类型中的值基本上是静态的(有时稍高,有时稍低) 例如,以下是其中一个流程的报告: Index Count %
guppy
模块来分析我的内存,然后每两分钟进行一次将内存分析写入文件的处理
在检查内存配置文件时,我看到内存中只有一种类型在增加-list
。其余类型中的值基本上是静态的(有时稍高,有时稍低)
例如,以下是其中一个流程的报告:
Index Count % Size % Cumulative % Referrers by Kind (class / dict of class)
0 3707 43 491717 58 491717 58 list
1 4200 48 239659 28 731376 87 dict of CustomClass
2 600 7 96000 11 827376 98 CustomClass
3 4 0 4646 1 832022 98 _io.TextIOWrapper
4 40 0 3664 0 835686 99 dict (no owner)
5 46 1 3358 0 839044 99 urllib.parse.SplitResult
6 90 1 2160 0 841204 100 dict of OtherCustomClass
7 18 0 2080 0 843284 100 tuple
8 1 0 424 0 843708 100 <Nothing>
9 4 0 384 0 844092 100 types.FrameType
索引计数%Size%累计%referers(按类别/类别分类)
0 3707 43 491717 58 491717 58列表
1 4200 48 239659 28 731376 87客户等级目录
26007 96000 11 827376 98定制类
3 4 0 4646 1 832022 98_io.textio包装器
44003664083568699 dict(无所有者)
5 46 1 3358 0 839044 99 urllib.parse.SplitResult
6 90 1 2160 841204 100其他客户类别的dict
718020800843284100元组
8 1 0 424 0 843708 100
9 4 0 384 0 844092 100类型。框架类型
如果任何其他类型的内存中的计数或大小增加,我可能已经知道哪个列表是内存泄漏的罪魁祸首,但因为只有list
的大小在增加,我不确定应该如何处理,并找到哪个列表是泄漏的根源
此外,我的所有属于类实例的列表要么受大小限制,要么每个间隔都被清除(我确保调用了clear)。我在函数内部创建的其他列表,我希望在函数不再在作用域中时将其删除
我错过什么了吗?
非常感谢考虑使用
在您的情况下,您可能需要执行以下操作:
redirect on
describe used
启动您的流程(不以任何方式检测)
例如,通过使用gcore获取该过程的活动核心,距离足够远,以显示增长
对于每个core,在第章中打开core并执行以下操作:
redirect on
describe used
因此,您将有两个文件(每个核心一个),您可以比较以查看哪些分配是新的或已消失。你的名单应该反映在那里。找到其中一个列表的地址,然后使用“解释”来了解它是如何使用的。嘿,谢谢你的回复!它可能会有点问题,因为它是一个更大系统的一部分,在k8s中通过docker映像执行,所以在非仪器化和本地运行它可能会有点问题。我会试着看看我是否能成功