【问题标题】:How is the Linux calculating MemFreeLinux 是如何计算 MemFree 的
【发布时间】:2010-11-27 07:36:27
【问题描述】:

我正在尝试了解我的嵌入式 linux 内存使用情况。

通过使用 top 实用程序和进程文件 /proc/meminfo,我可以看到一个进程正在使用多少虚拟内存,以及有多少物理内存可供系统使用。但是对于任何给定的进程,虚拟内存似乎都可能比使用的物理内存高得多。由于这是一个嵌入式系统内存交换被禁用。(SwapTotal = 0)

linux 是如何计算空闲物理内存的?因为它似乎没有考虑到虚拟内存空间中分配的所有内容。

【问题讨论】:

    标签: linux memory-management


    【解决方案1】:

    /proc/meminfo 中的MemFree 是伙伴分配器中有多少页可用的计数。这个伙伴分配器是内核中物理内存分配的基本单元;然而,有很多方法可以在需要时将页面返回给伙伴分配器 - 例如,释放空的 SLAB、丢弃缓存/缓冲区 RAM(即使这意味着在正在运行的进程中使 PTE 无效),或者作为最后的手段, 交换东西。

    事实上,MemFree 通常被控制为仅占总物理 RAM 的 5-10%,随着时间的推移,任何额外的空闲 RAM 都会被选入缓存。因此,单独的MemFree 是对整体内存情况的一个非常不完整的视图。

    对于给定进程的虚拟内存(VSIZE),这是指进程地址空间中所有映射内存段大小的总和。但是,并非所有这些都将实际存在 - 有些可能是paged in upon first access,因此在实际使用之前不会注册为正在使用的内存。驻留大小 (RSIZE) 是一个更准确的视图,因为它只注册现在中映射的页面 - 尽管如果给定页面映射到多个虚拟地址(其中当您考虑多个进程时,这很常见 - 共享库将相同的物理 RAM 映射到使用该库的所有进程)

    【讨论】:

    • 我认为这实际上解决了我困惑的症结“......驻留大小(RSIZE)是一个更准确的视图,因为它只注册现在映射的页面......”所以我的猜测是,如果任何一个进程决定尝试分配其所有 VSIZE,它也会将物理内存增加到该数量。
    【解决方案2】:

    尝试使用 htop。您必须安装它 sudo apt-get install htopyum install htop,随便什么。

    它将向您显示更准确的内存使用情况。

    基本上,它归结为“缓冲区/缓存”。

    free -m
    

    查看缓冲区/缓存行中的空闲列,这是对实际可用内容的更准确表示。

                 total       used       free     shared    buffers     cached
    Mem:          3770       3586        183          0        112       1498
    -/+ buffers/cache:       1976       1793
    Swap:         7624        750       6874
    

    【讨论】:

    • 不幸的是,我的嵌入式系统上的 Busybox 似乎无法使用 htop。
    猜你喜欢
    • 2015-06-20
    • 2020-08-31
    • 1970-01-01
    • 2011-04-27
    • 2017-09-16
    • 2011-10-16
    • 2019-02-03
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多