“Linux ed il mistero della memoria scomparsa”, a Natale nei cinema!


GNU/Linux memoriaSicuramente molti di voi conoscono il fantastico tool “free” che ci permette di controllare lo stato della memoria sul nostro sistema GNU/Linux

$ free -m
             total       used       free     shared    buffers     cached
Mem:           870        181        689          0          4         34
-/+ buffers/cache:        142        727
Swap:         2551         10       2541

inoltre, tutti sanno che per capire quanta RAM è libera su sistema, bisogna sommare il valore della colonna “free” con quello di “buffers” e “cached”, quindi nel mio caso parliamo di 727Mb liberi.

Questo, non è del tutto vero, ed ora vi illustro il perché:

             total       used       free     shared    buffers     cached
Mem:           870        833         37          0        274         33
-/+ buffers/cache:        525        345
Swap:         2551         10       2541

quello riportato è relativo allo stesso sistema GNU/Linux e la quantità di memoria disponibile non è 344Mb, ma praticamente, la stessa di prima! ;)

Ma facciamo un esempio, supponiamo di partire da una situazione iniziale come la seguente

            total       used       free     shared    buffers     cached
Mem:           870        165        704          0          0         22
-/+ buffers/cache:        142        728
Swap:         2551         10       2541

e lanciamo questo comando per creare un file di 500Mb

dd if=/dev/zero of=bigfile bs=1M count=500

se andiamo a controllare nuovamente lo stato della memoria, quello che otteniamo è

            total       used       free     shared    buffers     cached
Mem:           870        693        176          0          4        532
-/+ buffers/cache:        156        713
Swap:         2551         10       2541

i 500Mb che abbiamo scritto, sono stati completamente “cache-ati” e la “formula standard” per il calcolo della memoria disponibile funziona!

Ora proviamo invece a lanciare questo comando, per trovare tutti i files presenti sul nostro sistema (quindi ci vorrà un po di tempo), partendo sempre da una situazione “pulita”

ls -lR / > /dev/null 2>&1

e cosa otteniamo dal comando “free”???

             total       used       free     shared    buffers     cached
Mem:           870        838         31          0        279         29
-/+ buffers/cache:        529        340
Swap:         2551         10       2541

E qui la formuta ci restituisce 339Mb… il comando è terminato, non ho fatto partire nessuna nuova applicazione, ma dove è andata a finire questa memoria??? Chi la sta usando???
La risposta è: il kernel di Linux…
Si, perché ha mantenuto traccia di tutte le informazioni lette su filesystem, i famosi inode, così se qualche altra applicazione (ma anche la stessa) ha bisogno delle stesse informazioni, non deve andarle a leggere nuovamente dal disco, ma le troverà disponibili in RAM
Ma attenzione, non è che il kernel ci stia “rubando” la memoria, ma la sta usando per il sistema, non è un errore, è un comportamento voluto per mantenere il sistema performante e per usare al meglio le risorse disponibili!
E, ovviamente, se il sistema avrà necessità, questa memoria sarà rilasciata da kernel, per essere utilizzata dalle applicazioni che ne faranno richiesta
Ma, a questo punto, sorge un problema… come individuarla??? Come facciamo a capire se ci troviamo in questa situazione o se invece, abbiamo la necessità di espandere la RAM?
Qui ci viene di aiuto il filesystem “proc”, dove è presente il file “meminfo”, più precisamente, basterà eseguire questo comando

grep SReclaimable /proc/meminfo
SReclaimable:     397444 kB

questa è la RAM, momentaneamente occupata dal kernel ma disponibile all’occorrenza!
Il motivo che mi ha spinto a scrivere questo post, in realtà, non è per spiegare dove è andata a finire questa memoria, ma per consigliarvi di NON eseguire “a cuor leggero” uno dei comando più suggeriti al mondo, parlo del “fantomatico” risolutore di ogni problema di RAM

echo 3 > /proc/sys/vm/drop_caches

perché questa cache serve! Al kernel come a noi! Cancellarla significa solo obbligare il sistema a rileggere nuovamente le informazioni dal disco a discapito quindi delle performance!
Tanto, se ci dovesse servire memoria, ci penserà il kernel a liberarla in tutta autonomia! :)

About these ads

2 Responses to “Linux ed il mistero della memoria scomparsa”, a Natale nei cinema!

  1. Bit3Lux scrive:

    Ottimo post! Veramente interessante! :)

  2. Pingback: Marco Bollero (paper0k): “Linux ed il mistero della memoria scomparsa”, a Natale nei cinema! | TCNews24.it

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 113 follower

%d blogger cliccano Mi Piace per questo: