从14.04到16.04的“免费”输出变化是什么意思?


29

我注意到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

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

  • 使用/空闲的内存是否包括缓冲区和缓存?
  • 哪些数字与早期版本的“ +/-缓冲区/缓存”行中的已使用和可用数字等效?

Answers:


16

请考虑我从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

现在,Memused(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/c9908b59712d1afd6b9b9bfae1ba1

从新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值计算中的缓冲区/缓存。
  • +/- buffers/cache曾经是那里的早期版本中值free现在可作为:
    • -/ + buffers / cacheused =当前Mem used列(其计算已在上面详细说明)
    • -/ +缓冲区/高速缓存free作为当前新列中的更准确值提供available

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


1
通过将特定的答案=“ tl; dr part”放在顶部,将详细信息放在下面(现在是相反的),可以改善此答案。
Nikana Reklawyks

这是一个很好的解释,但是,OpenVZ的运行Ubuntu 16.04我看到“可用”甚至不来接近的自由列在“+/-缓存/缓存”在以前的“自由”。在运行相同的应用程序的情况下,我在14.04上可获得120MB的免费空间,而在16.04上可获得接近0的可用空间。这两个系统上的ram用法完全不同,或者一个免费的软件包是错误的(或者对于这些东西,只是OpenVZ一团糟)。
桑德罗·安东努奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.