psutil的奇怪行为

时间:2015-06-13 13:29:37

标签: python ubuntu-14.04 psutil

我使用库psutil for python 2.7。

考虑这个小程序:

{{1}}

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

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

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

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

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

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

如果内存占用量不断增加,那么就会陷入困境 - 在这种情况下,我们会发生内存“泄漏”(例如,如果有递归调用占用不断增加的资源,就会发生这种情况)。

程序行为可预测的时间很长(除非你为微控制器编写程序)。这些程序在多任务环境中运行,程序和操作系统不断(并同时)为计算机资源而战。

但是现代程序(例如PythonRubyPerl和其他程序在每次执行时都不会起作用。它们受到可用内存的影响(因其他正在运行的程序而异)。

请记住,不是您正在测试的5行程序。只需要process = psutil.Process(os.getpid())行。它调用os.getpid(),它调用操作系统的getpid()。结果进入psutil.Process,可能会调用几百行代码。最后,无辜的process =必须调用内存管理器为process保留内存,然后将结果传输到那里......