Hai riscontrato il problema Linux Ate My Ram .
Non fatevi prendere dal panico.
Questo non è un problema.
Il sistema funziona come previsto.
Il problema non è il tuo sistema operativo - il problema è la tua comprensione della memoria "libera".
I sistemi Unix usano la memoria per qualcosa di più dei semplici programmi in esecuzione. La memoria potrebbe essere utilizzata per:
- Programmi in esecuzione (attivo / usato)
- Buffering dei dati in transito (buffer)
- Dati memorizzati nella cache recentemente letti / scritti sul disco (cache)
- Assolutamente niente (gratuito)
Ciò che segue è un breve (e in gran parte incompleto) tour su come i moderni sistemi Unix riportano l'utilizzo della RAM.
Che cos'è la memoria libera (la definizione del sistema operativo) ?
Quando un sistema Unix riporta RAM come Free significa "Non sto usando questa RAM per niente".
La RAM libera è effettivamente inutile - Non sta rendendo il tuo sistema più veloce, è semplicemente seduto lì "libero" nel caso in cui qualcosa ne abbia bisogno. Quel qualcosa potrebbe essere uno dei tre altri elementi che ho menzionato sopra.
Cosa sono le memorie cache e buffer?
La memoria cache e buffer è la RAM utilizzata dal sistema operativo per rendere il sistema più veloce.
Questa memoria non è necessaria per l'esecuzione dei programmi in questo momento , quindi il tuo sistema operativo lo utilizza per contenere i dati di cui ha bisogno frequentemente - ad esempio la libreria C (necessaria praticamente per ogni programma che esegui) è quasi sempre tenuta in cache
memoria, quindi il il sistema non deve andare sul disco per trovare le istruzioni necessarie per stampare "Hello World" sullo schermo.
In realtà è molto più complicato di così - c'è memoria condivisa , memoria cablata , ecc. - Ma per i nostri scopi questa semplice spiegazione è adeguata.
Cos'è la memoria attiva?
La memoria attiva fa parte della nostra comprensione della memoria "usata" - RAM utilizzata dalle applicazioni per qualsiasi cosa essi facciano - ordinamento dei fogli di calcolo, pubblicazione di pagine Web, modifica della grafica, ecc.
La memoria "attiva" è stata "attiva" di recente - - il programma che afferma di aver fatto uso del suo contenuto (lettura o scrittura) e non è considerato un buon candidato per lo scambio.
Che cos'è la memoria inattiva?
Come la memoria attiva, la memoria inattiva è la RAM utilizzata dalle applicazioni per qualsiasi cosa essi facciano. La differenza è che questa memoria non è stata raggiunta da un po 'di tempo, quindi se push arriva a spingere il sistema operativo pensa che possa essere scambiato su disco e (con un po' di fortuna) il programma affermando che non lo chiederà più, quindi non lo noterò mai.
Cos'è la memoria "Usato" (la definizione UMANA)
Quello che tu e io pensiamo come memoria "usata" è, essenzialmente, la somma della memoria attiva e inattiva. Tutta la RAM attualmente richiesta dalle applicazioni per il loro uso.
Finché hai più RAM installata rispetto alla somma della memoria attiva e inattiva (più un bel margine di sicurezza di 512-1024 MB in alto) sei in un posto OK: il tuo sistema operativo probabilmente non colpirà lo swap e ucciderà le prestazioni .
Che cos'è la memoria "libera" (la definizione UMANA) ?
Quello che io e te consideriamo come memoria "libera" è la memoria disponibile per eseguire i programmi.
Questo è leggermente più complicato della semplice cifra "Free" riportata dai tuoi SO. Quando un programma richiede RAM, il sistema operativo tenterà di ottenere quella RAM nel modo meno distruttivo possibile:
- Se è disponibile memoria libera (restando in giro senza fare nulla) verrà allocata la RAM.
- Se non è disponibile memoria libera, il sistema operativo cannibalizzerà lo spazio della cache e del buffer: verranno eliminati gli elementi con accesso più recente / meno frequente nel pool di buffer e quella RAM fornita al programma.
- Se non c'è RAM Buffer / Cache per cannibalizzare, lo swapper guarderà la memoria inattiva e sceglierà le regioni che ritiene abbiano meno probabilità di accedere. I dati verranno pagati per lo swap (disco) e la RAM appena liberata fornita al programma.
- Se tutta la RAM inattiva è stata scambiata, lo swapper inizierà a mettere la RAM attiva sul disco.
(Questo è dove le prestazioni vanno di solito ai cani: ogni volta che un programma fa il suo turno sulla CPU, i suoi bit sostituiti devono essere riportati nella RAM, il che significa che la memoria attiva di qualche altro programma deve essere scambiata - il l'elevato turnover in swap è chiamato thrashing )
- Se il sistema ha scambiato tutto il possibile (e riempito la partizione di swap), o se stai eseguendo un sistema senza una partizione di swap, succedono cose cattive . A questo punto si verificherà una delle due cose:
malloc()
avrà esito negativo. Questo è il comportamento conforme a POSIX: il sistema operativo comunicherà al programma che richiede RAM che non è in grado di soddisfare la richiesta.
Il programma può richiedere meno RAM oppure, se non può accontentarsi di un pezzo di memoria più piccolo, può ripulire ed uscire. (Se il programma è scritto male, si bloccherà semplicemente.)
- Se sei su un box Linux, OOM-Killer potrebbe andare su una gang in stile gang-killer uccidendo la follia, terminando altri processi per provare a liberare abbastanza RAM per soddisfare la richiesta.
Nel caso in cui non riesci a capire dalla mia descrizione qui e dalla mia risposta sulla domanda collegata, penso che questo sia un modo terribile per affrontare il problema.
Perché la RAM libera aumenta quando elimini i file?
Nell'esempio della domanda qui hai notato che è possibile "liberare" la RAM eliminando il file di backup - la spiegazione è abbastanza semplice: dal momento che nulla utilizza quel file (nessun handle di file aperto) e non è più accessibile da il filesystem (non collegato) il sistema operativo sa che nessuno accederà mai più a quei dati e cancella i dati dalla cache del filesystem.
Questo rende il rapporto del sistema operativo più memoria libera, ma non ha alcun impatto sulle prestazioni del sistema.