首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用psutil.Process.memory_info内存与使用Pandas.memory_usage不同

使用psutil.Process.memory_info内存与使用Pandas.memory_usage不同
EN

Stack Overflow用户
提问于 2019-10-14 15:10:51
回答 1查看 2.6K关注 0票数 10

我正在分析一个利用Pandas来处理一些CSV的程序。我使用psutil's Process.memory_info报告虚拟内存大小(vms)和驻留集大小(rss)值。我还使用Pandas DataFrame.memory_usage (df.memory_usage().sum())来报告内存中dataframes的大小。

报告的vms值和df.memory_usage值之间存在冲突,其中Pandas只为dataframe报告的内存比Process.memory_info调用报告的整个(单线程)进程的内存要多。

例如:

  • rss: 334671872 B
  • vms: 663515136 B
  • df.memory_usage().sum():670244208 B

Process.memory_info调用是在memory_usage调用之后立即进行的。我的预期结果是,df.memory_usage < vms在任何时候都是,但这并不能维持。我想我误解了vms值的含义?

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 11:44:00

以下是与您的问题相关的参考资料:使用rss或vms跟踪内存RSSVMS的关系有点混乱。您可以在详细信息中了解这些概念。您还应该知道如何计算中的总内存使用量。

**TO SUMMARIZE AND COMPLEMENT MY OPINION**

RSS:

驻留集大小用于显示在RAM中为进程分配了多少内存。记住- It doesn't include memory which is swapped out

它涉及来自共享库的内存,包括所有堆栈和堆内存。

VMS:

虚拟内存大小包括进程可以访问的所有内存。其中包括;

交换内存,分配但未使用的内存,共享库中的内存。

示例:

假设一个Process-X有一个500 K的二进制文件,并且链接到2500 K的共享库,有200 K的堆栈/堆分配,其中100 K实际上在内存中(rest被交换或未使用),它实际上只加载了共享库的1000 K和它自己的二进制文件的400 K:

代码语言:javascript
复制
RSS: 400K + 1000K + 100K = 1500K
VMS: 500K + 2500K + 200K = 3200K

在本例中,由于部分内存是共享的,许多进程可能会使用它,所以如果将所有的RSS值加起来,您可以很容易地得到比系统更多的空间。

正如你所看到的,当你简单的运行这个;

代码语言:javascript
复制
import os
import psutil
process = psutil.Process(os.getpid())
print("vms: ", process.memory_info().vms)
print("rss:", process.memory_info().rss)

输出:

vms: 7217152 rss: 13975552

通过简单地添加,import pandas as pd,您可以看到不同之处。

代码语言:javascript
复制
import os
import psutil
import pandas as pd
process = psutil.Process(os.getpid())
print("vms: ", process.memory_info().vms)
print("rss:", process.memory_info().rss)

这是输出:

vms: 276295680 rss: 54116352

因此,在程序实际使用之前,分配的内存也可能不在RSS中。所以,如果你的程序预先分配了一堆内存,那么随着时间的推移使用它;

  • 您可以看到RSS上升,VMS保持不变。

现在,无论您使用df.memory_usage().sum()还是Process.memory_info,我相信RSS确实包含了来自动态链接库的内存。因此,它们的RSS之和将超过实际使用的内存。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58379570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档