Was bedeuten die Änderungen der "freien" Ausgabe von 14.04 bis 16.04?

29

Mir ist aufgefallen, dass sich die freeBefehlsberichterstattung zwischen Trusty und Xenial geändert hat. Folgendes zeigt free -m auf einem meiner Trusty-Computer:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7916       7645        271         99        455       1764
-/+ buffers/cache:       5426       2490
Swap:        24999        805      24194

Hier ist das Äquivalent auf einem (anderen) Xenial-System:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3553        1192         857          16        1504        2277
Swap:          3689           0        3689

Die +/- Puffer / Cache-Zeile, die ich mir hauptsächlich angesehen habe, ist weg. Wie soll ich die neuen Zahlen interpretieren?

  • Enthält Mem used / free Puffer und Cache oder nicht?
  • Welche Zahlen entsprechen den verwendeten und freien Zahlen in der Zeile "+/- Puffer / Cache" der früheren Version?
otus
quelle

Antworten:

16

Bitte beachten Sie die Beispielausgabe, die ich vom freeBefehl in meinem erhalten habe Ubuntu 12.04:

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

Der Feldwert Memused (kb_main_used) wird jetzt folgendermaßen berechnet:

used = total - free - cached - buffers

Früher war es:

used = total - free

Diese Änderung wurde mit dem folgenden Commit eingeführt: https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Ein Zwischenwert:

buffers_plus_cached = buffers (kb_main_buffers) + cached (kb_main_cached) = 365128 + 2113156 = 2478284

+/- Puffer / Cache-Wert wird wie folgt berechnet:

buffers = kb_main_used - buffers_plus_cached = 6187480 - 2478284 = 3709196
/
cache = kb_main_free + buffers_plus_cached = 1887160 + 2478284 = 4365444

Der neue Buff / Cache-Wert wird folgendermaßen berechnet:

buff/cache = kb_main_buffers+kb_main_cached = 365128 + 2113156 = 2478284

Dies ist der gleiche buffers_plus_cachedUnterschied wie in früheren Versionen. Der Unterschied besteht darin, dass er zuvor intern verwendet wurde und jetzt direkt angezeigt wird und die weiter berechnete Zeile -/+ buffers/cacheentfernt wurde

Weitere Informationen finden Sie in den folgenden Commits, in denen diese Änderungen vorgenommen wurden: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c990871a59

Ab dem neuen availableFeld ist der Wert für Linux-Kernel, die älter als 2.6.27 sind, derselbe wie der freeWert, aber für die späteren Versionen des Kernels ist er etwas anders:

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)

Mit freundlicher Genehmigung: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Die spezifische Antwort auf Ihre Fragen wäre also:

  • Die neue Version von freebezieht Puffer / Cache in die Berechnung von Mem used/freeWerten ein.
  • Der +/- buffers/cacheWert, der in früheren Versionen von vorhanden war, freeist jetzt verfügbar als:
    • - / + puffer / cacheused = Aktuelle Mem usedSpalte (Berechnung wie oben beschrieben)
    • - / + Puffer / Cachefree ist als genauerer Wert in der aktuellen neuen Spalte verfügbaravailable

NB: Die kb_*Variablennamen sind die internen Namen, die im Quellcode verwendet werden.

saji89
quelle
1
Diese Antwort könnte verbessert werden, indem die spezifische Antwort = "the tl; dr part" oben und die Details unten angegeben werden (im Moment ist es umgekehrt).
Nikana Reklawyks
Dies ist eine großartige Erklärung, aber unter OpenVZ mit Ubuntu 16.04 sehe ich, dass "available" nicht einmal der freien Spalte in "+/- puffer / cache" des vorherigen "free" nahe kommt. Mit den gleichen Apps bekomme ich am 14.04 120MB gratis und am 16.04 fast 0. Entweder ist die RAM-Nutzung auf diesen beiden Systemen völlig anders, oder eines der Pakete dieser Freien ist falsch (oder OpenVZ ist einfach ein Durcheinander für diese Dinge).
Sandro Antonucci