0

我正在为 python 2.7 使用库 psutil。

考虑这个小程序:

import os
import psutil

# return the memory usage in MB
process = psutil.Process(os.getpid())
print process.memory_info().rss / float(2 ** 20)

程序返回的内存信息总是不同的。我无法理解我的应用程序如何一直在做同样的事情(在这里,几乎什么都没有)在每次执行时不能有相同的内存占用。

示例(每一行都是不同的执行):

  • 10.37109375
  • 10.37109375
  • 10.359375
  • 10.41015625
  • 10.4140625
  • 10.30078125

我在这里错过了什么吗?

4

1 回答 1

1

测量记忆占用就像给运动中的人拍照。ps 实用程序并不总是看到相同大小的脚本+变量,某些部分并不总是可见。类被实例化,然后被销毁。分配变量,然后再次释放。

正如文档所述,动态类型语言(如 Python)常见的“垃圾”收集器在某些时间运行,这些时间并不总是与您的测量间隔同步,因此您会看到变化。

令人担忧的是,如果内存占用量会不断增加 - 在这种情况下,我们会有内存“泄漏”(例如,如果有一个递归调用占用不断增加的资源,就会发生这种情况)。

程序行为可预测的时代早已过去(除非您为微控制器编写程序)。这些程序在多任务环境中运行,其中程序和操作系统不断(并同时)争夺计算机资源。

但是现代程序,例如Python、和其他程序RubyPerl在每次执行时的行为并不相同。它们受到可用内存的影响(因正在运行的其他程序而异)。

请注意,这不是您正在测试的 5 行程序。只取线process = psutil.Process(os.getpid())。它调用 os.getpid(),后者调用操作系统的getpid(). 结果进入psutil.Process其中可能调用了几百行代码。最后,看起来无辜的process =必须调用内存管理器为 保留内存process,然后将结果传输到那里......

于 2015-06-13T13:50:49.873 回答