代码之家  ›  专栏  ›  技术社区  ›  DougN

计算Linux上使用的内存百分比

  •  2
  • DougN  · 技术社区  · 15 年前

    Linux noob问题:

    如果我有500MB的RAM和500MB的交换空间,那么操作系统和进程可以使用1GB的内存吗?

    换句话说,程序和操作系统可用的内存总量是物理内存大小和交换大小的总和吗?

    我试图找出要查询的SNMP计数器,但首先需要了解Linux如何更好地使用虚拟内存。

    谢谢

    4 回复  |  直到 15 年前
        1
  •  0
  •   Matthew Scharley    15 年前

    是的,这基本上是正确的。实际的数字可能(非常)略低一些,但为了所有的意图和目的,如果你有 x 物理内存和 y 虚拟内存(在Linux中交换),然后 x + y 操作系统和操作系统下运行的任何程序可用的内存。

        2
  •  5
  •   vstrien    15 年前

    实际上,它本质上是正确的,但您的“虚拟”内存并不存在 在旁边 你的“物理记忆”(如马修·夏利所说)。

    您的“虚拟内存”是一个抽象层,涵盖“物理”(如RAM)和“交换”(如硬盘,当然也包括RAM)内存。

    虚拟内存本质上是一个抽象层。您的程序总是处理一个“虚拟”地址,您的操作系统将其转换为RAM或磁盘上的地址(需要先加载到RAM),具体取决于数据所在的位置。所以你的程序不必担心内存不足。

        3
  •  1
  •   Mr.Ree    15 年前

    再简单不过了…

    内存页被懒散地分配。一个进程可以malloc()大量的内存,并且永远不会使用它。所以在你的500MB内存+500MB内存交换系统上,我可以——至少在理论上——从堆中分配2千兆内存,在我尝试使用过多的内存之前,一切都会顺利进行。(此时,任何进程都无法获取更多的内存页。希望这是我的过程。但并非总是如此。)

    作为32位系统的硬地址限制,单个进程可能限制为4 Gig。即使你在机器上有超过4吉格的RAM,并且你正在使用地狱寻址方案中奇怪的36位分段暴行,单个进程仍然仅限于4吉格。这4个gig中的一些必须用于共享库和程序代码。因此,作为一个地址限制,您最多可以获得2-3 Gigs的堆栈+堆。

    你可以在mmap文件,有效地给你更多的内存。它基本上充当额外的交换。也就是说,该文件只是mmap,而不是将程序的二进制代码数据加载到内存中,然后将其交换到swapfile中。根据需要,页面直接从文件交换到RAM中。

    您可以使用稀疏数据和mmap稀疏文件来了解一些有趣的内容。我见过X-Windows声称其内存使用量巨大,而实际上它只消耗了一点点。

    顺便说一句: 自由的 “也许能帮到你。可能的话” 目录/进程/内存信息 “或 虚拟机 线在 /proc/$pid/状态 . (特别是 虚拟机数据 VMSTK 或者可能” PS-$PID

        4
  •  1
  •   P Shved    15 年前

    虽然大部分都是真的,但事实并非如此 完全地 对的。对于特定进程,运行它的环境可能会限制进程可用的内存。检查的输出 ulimit -v 也。