试图了解 python 内存分析器

Trying to understand python memory profiler

我正在使用 Memory Profiler module to get the memory usage of my python code following this 答案。但是,我无法解释 %memit magic 的输出(或使用模块中的 @profile 装饰器或 mprof run 的输出)。

例如,

%memit range(10000) 

给我 peak memory: 97.41 MiB, increment: 0.24 MiB

同时,

%memit xrange(10000)

显示 peak memory: 97.46 MiB, increment: 0.00 MiB。我确实理解 xrange 返回 xrange typerange() 返回列表之间的区别。我在这里使用它们只是为了演示这两种情况。

我的问题是

  1. peak memoryincrement 究竟是什么意思?
  2. 我应该从这个输出中报告什么作为脚本(或函数)的总内存使用量?

Peak memory指的是您的系统在运行时间运行时间内的系统内存使用峰值(包括其他进程的内存使用)。

增量是内存使用量相对于程序运行之前的内存使用量的增量(即increment = peak memory - starting memory)。

所以你会举报 increment。峰值内存只是帮助您计算在程序中您与使用所有 RAM 的距离有多近 运行。

如果参考自述文件用法部分的逐行示例:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

%memit 本质上是为您提供第 6 行的内存使用情况,但报告相对于第 4 行的增量(实际上是第 1 行,但大概第 1-3 行没有计算)。