【问题标题】:Memory Profiling, How to find variable name associated with object内存分析,如何找到与对象关联的变量名
【发布时间】:2019-12-21 08:46:28
【问题描述】:

我有一个 Python 应用程序,它会消耗 GB 的数据。 为了跟踪我安装guppy 并在一个时间单位后打印堆的内存使用情况,我在报告中看到以下内容。

Partition of a set of 43325494 objects. Total size = 7524458264 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0 2556102   6 2678794896  36 2678794896  36 dict of cocotb.binary.BinaryValue
...

现在,在我的应用程序的几十个模块中创建了 BinaryValue 类型的对象。 要进行调试,我必须获取这些对象的行号/文件名/变量名。所以 有什么方法可以获取这些信息吗? 如果不是,那么我可以使用什么策略来解决问题的根源?

注意:由于 python 应用程序与 C 程序紧密耦合,因此无法以交互方式运行 python 代码,任何调试步骤都必须直接插入代码中。

【问题讨论】:

    标签: python python-2.7 memory-leaks guppy


    【解决方案1】:

    直接引用的“名称”显示在byvia 属性中,例如:

    heap()[0].byvia
    

    考虑到您的设置是dict of [something],via 将始终是.__dict__,所以使用referrers 会更有用:

    heap()[0].referrers.byvia
    

    参考模式显示在rp 属性中,从根(guppy 的遍历树)开始的最短路径显示在sp 属性中:

    heap()[0].rp
    heap()[0].sp
    

    我个人更喜欢过滤一组感兴趣的对象,然后从一组对象中获取一个 somgle 对象(例如:.byid[0]),然后做一条最短路径。

    所有不同属性的文档是python 3 versionpython 2 version

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多