psutil 的奇怪行为

Strange behavior of psutil

我正在为 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)

程序返回的内存信息总是不同的。我不明白我的应用程序为什么总是做同样的事情(在这里,几乎什么都没有)在每次执行时为什么不能有相同的内存占用。

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

我是不是遗漏了什么?

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

如文档所述,'garbage' 收集器在某些时间并不总是与您的测量间隔同步,在动态类型语言(例如 Python、运行s 中很常见, 所以你会看到变化。

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

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

但是现代程序,例如 PythonRubyPerl 等,每次执行的行为都不一样。它们受可用内存的影响(因其他 运行ning 程序而异)。

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