我使用库psutil for python 2.7。
考虑这个小程序:
{{1}}
程序返回的内存信息总是不同的。我无法理解我的应用程序如何一直做同样的事情(这里几乎没有)在每次执行时都不能拥有相同的内存占用。
示例(每行是不同的执行):
我在这里错过了什么吗?
答案 0 :(得分:1)
测量记忆占用就像是在拍摄行动中某人的照片。 ps utils并不总是看到相同大小的脚本+变量,有些部分并不总是可见的。类被实例化然后被销毁。分配变量,然后再次释放。
正如文档所说,动态类型语言(如Python)常见的“垃圾”收集器在某些时间运行,这些时间并不总是与您的测量间隔同步,因此您会看到变化。
如果内存占用量不断增加,那么就会陷入困境 - 在这种情况下,我们会发生内存“泄漏”(例如,如果有递归调用占用不断增加的资源,就会发生这种情况)。
程序行为可预测的时间很长(除非你为微控制器编写程序)。这些程序在多任务环境中运行,程序和操作系统不断(并同时)为计算机资源而战。
但是现代程序(例如Python
,Ruby
,Perl
和其他程序在每次执行时都不会起作用。它们受到可用内存的影响(因其他正在运行的程序而异)。
请记住,不是您正在测试的5行程序。只需要process = psutil.Process(os.getpid())
行。它调用os.getpid(),它调用操作系统的getpid()
。结果进入psutil.Process
,可能会调用几百行代码。最后,无辜的process =
必须调用内存管理器为process
保留内存,然后将结果传输到那里......