问题描述
我注意到free
命令报告在Trusty和Xenial之间已更改。这是我的一台Trusty计算机上的`free -m’显示的内容:
$ free -m
total used free shared buffers cached
Mem: 7916 7645 271 99 455 1764
-/+ buffers/cache: 5426 2490
Swap: 24999 805 24194
这是等效的Xenial系统:
$ free -m
total used free shared buff/cache available
Mem: 3553 1192 857 16 1504 2277
Swap: 3689 0 3689
我主要用来查看的+/-缓冲区/缓存行已消失。我应该如何解释新数字?
-
使用/空闲的内存是否包括缓冲区和缓存?
-
哪些数字与早期版本的“ +/-缓冲区/缓存”行中的已使用和可用数字等效?
最佳回答
请考虑我从Ubuntu 12.04
中的free
命令获得的示例输出:
total used free shared buffers cached
Mem: 8074640 6187480 1887160 377056 365128 2113156
-/+ buffers/cache: 3709196 4365444
Swap: 15998972 82120 15916852
现在,按以下方式计算Mem used
(kb_main_used)字段值:
used = total - free - cached - buffers
以前,它曾经是:
used = total - free
在以下提交https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9中引入了此更改
中间值:
buffers_plus_cached = buffers (kb_main_buffers) + cached (kb_main_cached) = 365128 + 2113156 = 2478284
+/-缓冲区/缓存值的计算如下:
buffers = kb_main_used - buffers_plus_cached = 6187480 - 2478284 = 3709196
/
cache = kb_main_free + buffers_plus_cached = 1887160 + 2478284 = 4365444
新的buff /cache值的计算如下:
buff/cache = kb_main_buffers+kb_main_cached = 365128 + 2113156 = 2478284
这与以前版本中使用的buffers_plus_cached
相同,不同之处在于以前在内部使用它,现在直接显示它,并且进一步计算的行-/+ buffers/cache
已删除
有关更多信息,请检查引入了这些更改的这些提交:https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908b59712d1afd6b9bf7971ba1d8900ae5adb8
对于新的available
字段,对于早于2.6.27的Linux内核,其值与free
值相同,但对于较早版本的Kernel,则有所不同:
Estimation of how much memory is available for starting new
applications, without swapping. Unlike the data provided by the
cache or free fields, this field takes into account page cache
and also that not all reclaimable memory slabs will be reclaimed
due to items being in use (MemAvailable in /proc/meminfo,
available on kernels 3.14, emulated on kernels 2.6.27+,
otherwise the same as free)
礼貌:http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html
因此,对您问题的具体答案将是:
-
free
的新版本在Mem used/free
值的计算中包括缓冲区/缓存。 -
现在,以前版本的
free
中存在的+/- buffers/cache
值现在可用于:-
-/+缓冲区/缓存
used
=当前Mem used
列(其计算在上面进行了详细说明) -
-/+缓冲区/缓存
free
可作为当前新列available
中的更准确值使用
-
N.B:kb_*
变量名称是源代码中使用的内部名称。