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)
程序返回的内存信息总是不同的。我不明白我的应用程序为什么总是做同样的事情(在这里,几乎什么都没有)在每次执行时为什么不能有相同的内存占用。
示例(每一行都是不同的执行):
- 10.37109375
- 10.37109375
- 10.359375
- 10.41015625
- 10.4140625
- 10.30078125
我是不是遗漏了什么?
测量内存占用就像给运动中的人拍照一样。 ps 实用程序并不总是看到相同大小的脚本+变量,一些部分并不总是可见的。 类 被实例化,然后被销毁。分配变量,然后再次释放。
如文档所述,'garbage' 收集器在某些时间并不总是与您的测量间隔同步,在动态类型语言(例如 Python、运行s 中很常见, 所以你会看到变化。
令人担忧的是,如果内存占用量会不断增加 - 在这种情况下,我们会有内存 'leakage'(例如,如果递归调用占用不断增加的资源,就会发生这种情况)。
程序行为可预测的时代早已结束(除非您为微控制器编写程序)。多任务环境中的程序 运行,其中程序和操作系统不断(并同时)争夺计算机资源。
但是现代程序,例如 Python
、Ruby
、Perl
等,每次执行的行为都不一样。它们受可用内存的影响(因其他 运行ning 程序而异)。
请注意,您正在测试的是不是 5 行程序。只取行 process = psutil.Process(os.getpid())
。它调用 os.getpid(),后者调用操作系统的 getpid()
。结果进入 psutil.Process
,这可能会调用几百行代码。最后,一脸无辜的process =
不得不调用内存管理器为process
预留内存,然后将结果传到那里...
我正在为 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
我是不是遗漏了什么?
测量内存占用就像给运动中的人拍照一样。 ps 实用程序并不总是看到相同大小的脚本+变量,一些部分并不总是可见的。 类 被实例化,然后被销毁。分配变量,然后再次释放。
如文档所述,'garbage' 收集器在某些时间并不总是与您的测量间隔同步,在动态类型语言(例如 Python、运行s 中很常见, 所以你会看到变化。
令人担忧的是,如果内存占用量会不断增加 - 在这种情况下,我们会有内存 'leakage'(例如,如果递归调用占用不断增加的资源,就会发生这种情况)。
程序行为可预测的时代早已结束(除非您为微控制器编写程序)。多任务环境中的程序 运行,其中程序和操作系统不断(并同时)争夺计算机资源。
但是现代程序,例如 Python
、Ruby
、Perl
等,每次执行的行为都不一样。它们受可用内存的影响(因其他 运行ning 程序而异)。
请注意,您正在测试的是不是 5 行程序。只取行 process = psutil.Process(os.getpid())
。它调用 os.getpid(),后者调用操作系统的 getpid()
。结果进入 psutil.Process
,这可能会调用几百行代码。最后,一脸无辜的process =
不得不调用内存管理器为process
预留内存,然后将结果传到那里...