Cosa significano i cambiamenti nell'output `libero` dal 14.04 al 16.04?


29

Ho notato che la freesegnalazione dei comandi è cambiata da qualche parte tra Trusty e Xenial. Ecco cosa mostra `free -m 'su uno dei miei computer Trusty:

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

Ecco l'equivalente su (un diverso) sistema Xenial:

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

La riga +/- buffer / cache, che ho usato principalmente per guardare, è sparita. Come devo interpretare i nuovi numeri?

  • Mem utilizzato / libero include buffer e cache o no?
  • Quali numeri sono l'equivalente dei numeri usati e liberi sulla riga "+/- buffer / cache" della versione precedente?

Risposte:


16

Si prega di considerare l'output di esempio che ho ricevuto dal freecomando nel mio Ubuntu 12.04:

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

Il valore del campo Memused (kb_main_used) viene ora calcolato in questo modo:

used = total - free - cached - buffers

In precedenza, era:

used = total - free

Questa modifica è stata introdotta nel seguente commit https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Un valore intermedio:

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

+/- il valore dei buffer / cache viene calcolato in questo modo:

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

Il nuovo valore buff / cache viene calcolato in questo modo:

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

Questo è lo stesso di buffers_plus_cached, usato nelle versioni precedenti, la differenza è che in precedenza era usato internamente, e ora è stato visualizzato direttamente, e l'ulteriore riga calcolata, -/+ buffers/cacheè stata rimossa

Per maggiori informazioni, controlla questi commit, dove sono state introdotte queste modifiche: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps-ng/proc89/b9d1bbdbdd0dcbdcc0d0dc0dcxdc

A partire dal nuovo availablecampo, per i kernel Linux precedenti alla 2.6.27, il suo valore è uguale al freevalore, ma per le versioni successive del kernel, è un po 'diverso:

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)

Per gentile concessione: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Quindi, la risposta specifica alle tue domande sarebbe:

  • La nuova versione di freeinclude buffer / cache nei calcoli dei Mem used/freevalori.
  • Il +/- buffers/cachevalore che era presente nelle versioni precedenti di freeè ora disponibile come:
    • - / + buffer / cacheused = Mem usedcolonna corrente (il suo calcolo è dettagliato sopra)
    • - / + buffer / cachefree è disponibile come valore più accurato nella nuova colonna correnteavailable

NB: I kb_*nomi delle variabili sono i nomi interni utilizzati nel codice sorgente.


1
Questa risposta potrebbe essere migliorata mettendo la risposta specifica = "la parte tl; dr" in alto e i dettagli in basso (in questo momento è il contrario).
Nikana Reklawyks,

Questa è un'ottima spiegazione ma su OpenVZ con Ubuntu 16.04 vedo che "disponibile" non si avvicina nemmeno alla colonna libera in "+/- buffer / cache" sul precedente "libero". Avendo le stesse app in esecuzione ottengo 120 MB gratuiti il ​​14.04 e quasi 0 disponibili il 16.04. O l'utilizzo della RAM è completamente diverso su quei due sistemi o uno di quei pacchetti gratuiti è sbagliato (o è solo OpenVZ un casino per queste cose).
Sandro Antonucci,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.