`free` 输出从 14.04 到 16.04 的变化是什么意思?

otu*_*tus 31 memory-usage free

我注意到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
Run Code Online (Sandbox Code Playgroud)

这是(不同的)Xenial 系统上的等效项:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3553        1192         857          16        1504        2277
Swap:          3689           0        3689
Run Code Online (Sandbox Code Playgroud)

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

  • Mem used/free 是否包括缓冲区和缓存?
  • 哪些数字与早期版本的“+/- 缓冲区/缓存”行中的已用数字和空闲数字相同?

saj*_*i89 18

请考虑我从我的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
Run Code Online (Sandbox Code Playgroud)

纪念品used(kb_main_used)字段值现在这样计算:

used = total - free - cached - buffers
Run Code Online (Sandbox Code Playgroud)

以前,它曾经是:

used = total - free
Run Code Online (Sandbox Code Playgroud)

此更改在以下提交中引入https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

中间值:

buffers_plus_cached = buffers (kb_main_buffers) + cached (kb_main_cached) = 365128 + 2113156 = 2478284
Run Code Online (Sandbox Code Playgroud)

+/- 缓冲区/缓存值的计算方式如下:

buffers = kb_main_used - buffers_plus_cached = 6187480 - 2478284 = 3709196
/
cache = kb_main_free + buffers_plus_cached = 1887160 + 2478284 = 4365444
Run Code Online (Sandbox Code Playgroud)

新的 buff/cache 值计算如下:

buff/cache = kb_main_buffers+kb_main_cached = 365128 + 2113156 = 2478284
Run Code Online (Sandbox Code Playgroud)

这个buffers_plus_cached和之前版本使用的一样,不同的是以前是在内部使用,现在直接显示,-/+ buffers/cache去掉了进一步计算的那一行

有关更多信息,请查看这些提交,其中引入了这些更改:https : //gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c991608b1b5aae

从新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)
Run Code Online (Sandbox Code Playgroud)

礼貌: http : //manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

所以,你的问题的具体答案是:

  • 新版本freeMem used/free值的计算中包括缓冲区/缓存。
  • +/- buffers/cache曾经是那里的早期版本中值free现在可作为:
    • -/+ buffers/cacheused = 当前Mem used列(其计算详见上文)
    • -/+ buffers/cachefree作为当前新列中更准确的值可用available

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