从 14.04 到 16.04 的 `free` 输出的变化意味着什么?

从 14.04 到 16.04 的 `free` 输出的变化意味着什么?

我注意到freeTrusty 和 Xenial 之间的命令报告有所变化。以下是“free -m”在我的其中一台 Trusty 计算机上显示的内容:

$ 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

我主要用来查看的 +/- 缓冲区/缓存行不见了。我应该如何解释新的数字?

  • 已使用/可用的内存是否包括缓冲区和缓存?
  • 哪些数字相当于早期版本中“+/- 缓冲区/缓存”行上的已用数字和可用数字?

答案1

free请考虑我从我的命令中获得的示例输出Ubuntu 12.04

           total       used       free     shared    buffers     cached
Mem:       8074640    6187480    1887160     377056     365128    2113156
-/+ buffers/cache:    3709196    4365444
Swap:     15998972      82120   15916852

内存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,但对于更高版本的内核,其值略有不同:

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
  • +/- buffers/cache以前版本中的值现在free可以用以下形式获得:
    • -/+ 缓冲区/缓存used= 当前Mem used列(其计算详见上文)
    • -/+ 缓冲区/缓存free可用作当前新列中更准确的值available

注意:变量kb_*名是源代码中使用的内部名称。

相关内容