代码之家  ›  专栏  ›  技术社区  ›  Alex B

如何可靠地测量Linux中的可用内存?

  •  19
  • Alex B  · 技术社区  · 16 年前

    /proc/meminfo 显示大量内存使用统计信息。

    MemTotal:      4040732 kB
    MemFree:         23160 kB
    Buffers:        163340 kB
    Cached:        3707080 kB
    SwapCached:          0 kB
    Active:        1129324 kB
    Inactive:      2762912 kB
    

    它们之间有相当多的重叠。例如,据我所知,可以有活动页面缓存(属于“缓存”和“活动”)和非活动页面缓存(“非活动”+“缓存”)。

    我想做的是测量“空闲”内存,但以一种方式,它包括可能被丢弃的已用页面,而不会对整个系统的性能产生重大影响。

    起初,我倾向于使用“free”+“inactive”,但Linux的“free”实用程序在其“buffer-adjusted”显示中使用“free”+“cached”,所以我很好奇有什么更好的方法。

    当内核内存不足时,要删除的页面的优先级是多少?衡量可用内存的更合适指标是什么?

    5 回复  |  直到 16 年前
        1
  •  8
  •   Community Mohan Dere    10 年前

    退房 how Qt Extended (previously Qtopia) anticipates OOM situations.

    有两项活动:

    • (MemFree+Buffers+Cached)/MemTotal<特雷肖尔德(英国) /proc/meminfo )
    • 主要页面故障>特雷肖尔德(PGM) /proc/vmstat (我想)

    第一个是内存不足的早期警告,并触发更频繁的页面故障监视。第二个信号是垃圾,这会降低系统性能,是OOM killer将运行的良好提示。

        2
  •  3
  •   Ole Tange    16 年前

    起初,我发现你的问题很简单,正如在实践中从 free

    while true; do cat 1gb_file >/dev/null; done
    

    如果您的系统有>1 GB缓存,则该缓存将快速运行。但是,如果你开始使用一些缓存来做其他事情,它会破坏系统的性能。

        3
  •  3
  •   Costa    9 年前

    从linux-3.14开始,在/proc/meminfo中提供了新的度量mem。

    并检查无实用程序输出中的“-/+buffers/cache:”行。

        4
  •  2
  •   Dave    16 年前

    如果我要使用启发式,我会说你应该取“Inactive”的值,它是“缓冲区或页面缓存内存的总量,以千字节为单位,是可用的和可用的。这是最近没有使用过的内存,可以回收用于其他目的。”如果你发现你取了这个值,系统继续正常工作,您还可以估计一些“活动”的百分比作为猜测,因为系统可能最近使用了一些页面,但不会再次使用它们。你比我更了解这个系统。如果系统专用于您将要执行的任何操作,那么可能很快使用的活动页面和缓存文件将取决于系统最近是否用于其他用途。

        5
  •  2
  •   Ladadadada    13 年前

    我使用以下方法:

    FREE_KB = MemFree + Buffers + Cached
    
    FREE_KB=$(($(echo `sed -n '2p;3p;4p' <  /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g")))
    
    
    USED_KB = MemTotal - MemFree - Buffers - Cached
    
    USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g")))