如何在Python中检测我的RAM和总空间?

时间:2012-06-22 21:55:23

标签: linux python-2.7

所以,标题描述几乎所有必要的回答我。还有一件事:请回复一下默认安装Python的库,因为我正在开发的应用程序是Ubuntu App Showdown的一部分。

运行Python 2.7,Ubuntu 12.04。

1 个答案:

答案 0 :(得分:1)

你要求的数字几乎不可能计算,而且价值很小。

任何运行一段时间的Linux系统几乎都没有“免费”内存。只是cat /proc/meminfo - MemFree条目通常只有几兆字节。

那么,记忆在哪里去了?

内核为初学者缓存所有磁盘访问。 这通常在Cached条目中可见。当您需要更多内存时,磁盘缓存将被修剪,因此您可以将该数字添加到MemFree

但是,如果一个应用程序在具有2 GB RAM的系统上分配2千兆字节(malloc()),那通常只会被授予:你得到一个有效的指针。 但是,实际上没有为您的应用程序保留RAM - 只有当您的应用程序开始触摸内存页面时才会发生 - 每个触摸的页面都将被分配。 您可以要求的最大尺寸为CommitLimit

但是应用程序代码本身也可能不在RAM中 - 二进制文件和库是mmapp()ed,所以再次只有被触摸的页面被加载到RAM中。

如果您运行top之类的工具 - 您可以获得每个进程的各种内存信息,包括VIRT,RES和SHR。

  • VIRT用于“虚拟” - 应用程序在声明所有要求的页面时所需的所有内存页面。
  • RES是'常驻' - 实际使用的内存量
  • SHR是“共享” - 与其他应用程序共享的页面数量,例如在多个应用程序中加载的库。

那么,了解可用内存的价值是多少? 您可以启动一个可能需要比系统更多的RAM的应用程序,但它运行... 您甚至可以运行应用程序两次或三次 - 无论如何共享代码页......

注意:上面的答案削减了不少角落,真正的机制明显更加复杂。我甚至没有开始将交换空间带入故事中。 但这对你有用,我希望......