试图理解python内存分析器

时间:2017-07-26 05:58:49

标签: python memory-profiling

我正在使用Memory Profiler模块来获取this回答后我的python代码的内存使用情况。但是,我无法解释@profile magic的输出(或使用模块中mprof run装饰器的输出或%memit range(10000) 的输出)。

例如,

peak memory: 97.41 MiB, increment: 0.24 MiB

给了我%memit xrange(10000)

while,

peak memory: 97.46 MiB, increment: 0.00 MiB

显示xrange。我理解xrange type返回range()而不是peak memory返回列表之间的区别。我在这里使用它们只是为了演示这两种情况。

我的问题是

  1. incrementsub extract_json{ my $file = shift; local $/; open my $fh, "<", "$file"; my $json = <$fh>; return $json; } my $targetfile = extract_json(' URL of JSON file'); my $object = JSON::XS->new->decode (decode "UTF-8", $targetfile); my $flat_hash = { 'var'=> $object->{'a'}{'b'}{'c'}{'d'} }; 实际上意味着什么?
  2. 我应该从此输出报告脚本(或函数)的总内存使用量?

1 个答案:

答案 0 :(得分:3)

峰值内存是指程序运行期间系统的峰值内存使用量(包括其他进程的内存使用量)。

增量是内存使用量相对于程序运行前的内存使用量的增量(即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行没有计算)。 / p>