【问题标题】:Calculating % memory used on Linux计算 Linux 上使用的内存百分比
【发布时间】:2010-12-09 14:55:08
【问题描述】:

Linux 菜鸟问题:

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

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

我试图弄清楚要查询哪些 SNMP 计数器,但需要先了解 Linux 如何更好地使用虚拟内存。

谢谢

【问题讨论】:

    标签: linux memory virtual swap


    【解决方案1】:

    虽然大多数情况下它是正确的,但它并不完全正确。对于特定进程,您运行它的环境可能会限制您的进程可用的内存。检查ulimit -v 的输出。

    【讨论】:

    • 问题说明“操作系统和进程”是否可以使用一定数量的内存。我认为这个答案有点误导,因为它解决了一个不同的问题,即“特定进程”是否可以使用一定数量的内存。
    • @vstrien,很好,我已经为那些不完全理解“完全”这个词的人解决了我的问题
    【解决方案2】:

    实际上,它本质上是正确的,但是您的“虚拟”内存并不存在于旁边您的“物理内存”(正如 Matthew Scharley 所说)。

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

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

    【讨论】:

    • 我从来没有说过任何东西都在任何东西之外,我只是说可用空间量是两者的结合。但是哦,好吧。
    • 在您的帖子中,我读到“如果您有 x 物理内存和 y 虚拟内存(在 linux 中交换),那么您就有 x + y 内存可用”。但是,虚拟内存不是交换,虚拟内存是涵盖交换和“真实”内部内存的抽象层。
    • 线条有点模糊。例如,在 Windows 中,当您配置“虚拟内存”时,您正在配置与 Linux 中的交换相同的东西。您无需配置所需的总内存量,而是配置用于分页的硬盘容量。
    • a) 如果您认为我的答案有问题,请在 cmets 中通知会很好 b) 如果您阅读得更好,我的答案实际上并没有错。
    • 抱歉,当时我还不能发表评论。但现在我可以 - 所以我会改变和更新:)。
    【解决方案3】:

    没有什么比这更简单了......

    内存页面是延迟分配的。一个进程可以 malloc() 大量内存并且从不使用它。因此,在您的 500MB_RAM + 500MB_SWAP 系统上,我可以 - 至少在理论上 - 从堆中分配 2 gig 的内存,并且事情会顺利运行,直到我尝试使用过多的内存。 (此时任何无法获取更多内存页面的进程都会遭到攻击。希望这是我的进程。但并非总是如此。)

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

    您可以将文件映射到其中,从而有效地为您提供更多内存。它基本上充当额外的交换。 IE。与其将程序的二进制代码数据加载到内存中,然后将其交换到交换文件中,不如直接映射文件。根据需要,页面会直接从文件交换到 RAM。

    您可以通过稀疏数据和映射的稀疏文件获得一些有趣的东西。我见过 X-windows 声称使用了巨大的内存,而实际上它只用了一点点。

    顺便说一句:“免费”可能会对您有所帮助。就像“cat /proc/meminfo”或 /proc/$PID/status 中的 Vm 行一样。 (尤其是 VmDataVmStk。)或者也许是“ps up $PID

    【讨论】:

      【解决方案4】:

      是的,这基本上是正确的。实际数字可能(非常)略低,但出于所有意图和目的,如果您有x 物理内存和y 虚拟内存(在 linux 中交换),那么您有x + y 内存可供操作系统使用以及在操作系统下运行的任何程序。

      【讨论】:

        猜你喜欢
        • 2012-08-20
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多