GNU/Linux >> Linux Esercitazione >  >> Linux

Come sapere se è disponibile memoria sufficiente per distribuire una nuova applicazione su una macchina Linux?

(Probabilmente è un po' tardi per l'OP, ma questo viene chiesto abbastanza spesso, quindi ci proverò)

free normalmente mostra qualcosa del genere:

             total       used       free     shared    buffers     cached
Mem:       8195284    8137708      57576          0    1232328    2651156
-/+ buffers/cache:    4254224    3941060
Swap:     18892216     759852   18132364

Le persone tendono a guardare il Mem: line quando si cerca di scoprire quanta memoria libera hanno. Sfortunatamente quella riga è abbastanza fuorviante, perché il kernel di Linux cerca di fare un uso ottimale della memoria disponibile in (almeno) questi modi:

  • Mette nella cache i dati dal sottosistema I/O (ad esempio il disco), in modo che siano prontamente disponibili se necessario.

  • Eliminerà attivamente i processi che sono rimasti inattivi per un po' di tempo nello spazio di swap, a favore della memorizzazione nella cache dei dati per i processi attivi. Questo tende a favorire il throughput rispetto alla reattività, quindi alcune persone ottimizzano il proprio kernel per modificare questo comportamento.

Il primo punto è fonte di confusione riguardo a free , perché Mem: la riga include la memoria utilizzata per la memorizzazione nella cache nella quantità di memoria utilizzata. Il kernel, tuttavia, memorizzerà nella cache il più possibile per motivi di prestazioni. Infatti, su qualsiasi sistema Linux attivo da un po' di tempo, la memoria libera tende ad essere prossima allo zero:la memoria inutilizzata è memoria sprecata.

La memoria cache, tuttavia, può essere liberata dal kernel se necessario da un altro processo. Anche se avrà un certo impatto sulle prestazioni di I/O, altri processi possono disporre di più memoria senza utilizzare lo spazio di swap . Pertanto, per la maggior parte degli intenti e degli scopi, quella memoria è libera .

Ecco perché free include una seconda riga, dove la memoria cache è considerata libera:

-/+ buffers/cache:    4254224    3941060

Questa seconda riga è ciò che le persone dovrebbero guardare quando vogliono sapere se hanno abbastanza memoria libera per un certo scopo.

Nell'esempio sopra, secondo il Mem: line ci sono ~57 MB di memoria libera. Se si legge la seconda riga, però, ci sono in realtà circa 3,9 GB che può essere utilizzato senza forzare lo scambio dei processi attivi. Come nota a margine, ci sono anche circa 760 MB di dati usati raramente che sono stati scambiati, per fare più spazio nella memoria principale per i processi e la memorizzazione nella cache.

All'incirca nello stesso momento, il contenuto di /proc/meminfo :

MemTotal:        8195284 kB
MemFree:           57660 kB
Buffers:         1232352 kB
Cached:          2651156 kB
SwapCached:       119936 kB
.
.
.

MemTotal :la memoria fisica disponibile rilevata dal kernel.

MemFree :la memoria fisica inutilizzata - la memoria libera mostrata nel Mem: riga di free .

Buffers :archiviazione relativamente temporanea di blocchi di disco non elaborati.

Cached :cache in memoria per i file letti dal disco. Non include la memoria SwapCached.

SwapCached :memoria che una volta è stata scambiata, quindi reinserita ma è ancora nello spazio di scambio. Se necessario, i suoi contenuti possono essere semplicemente scartati (molto velocemente!), senza doverli sostituire (più lentamente).

Quindi, per avere una stima semi-accurata della memoria effettivamente disponibile

MemFree + Buffers + Cached + SwapCached

è un buon punto di partenza - e quello free mostra in quella seconda riga.

Naturalmente, la gestione della memoria e le relative statistiche e misurazioni sono più complicate di così. I numeri mostrati da free nella migliore delle ipotesi sono semplici stime, poiché ci sono molte altre variabili da tenere in considerazione se si desidera approfondire. Per le persone che eseguono regolarmente l'ottimizzazione dell'utilizzo della memoria, questa è quasi una forma d'arte.

MODIFICA:

Un link un po' divertente su questo "problema":

http://www.linuxatemyram.com/

MODIFICA 2:

Per confermare il commento sull'analisi dell'uso della memoria quasi come una forma d'arte:

Anche free perde una parte importante dei dati memorizzati nella cache sui moderni sistemi Linux. Da /proc/meminfo sul mio sistema:

SReclaimable:    2253576 kB

Si tratta di circa 2 GB di memoria che viene utilizzata dall'allocatore di lastre di sistema per la memorizzazione nella cache delle voci di directory e simili ed è recuperabile (ovvero può essere cancellata e utilizzata dai processi se necessario). Ancora free non la considera memoria cache e non la inserisce in nessuno dei suoi calcoli e quindi si presenta come memoria utilizzata.

Il slabtop utility, se disponibile, consente all'amministratore di sistema di scoprire a cosa serve la slab cache.

Un modo (solo per l'utente root) per avere free mostrare l'effettivo utilizzo della memoria del sistema è il seguente:

# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches 
# free
             total       used       free     shared    buffers     cached
Mem:       8195284    3181468    5013816          0       8656     228832
-/+ buffers/cache:    2943980    5251304
Swap:            0          0          0
# swapon -a

Il primo comando disabilita lo spazio di swap. Non dovrebbe essere emesso se la memoria disponibile potrebbe non essere sufficiente per contenere i dati che sono stati scambiati - in tal caso si deve tener conto del Swap: line of free nei loro calcoli sull'utilizzo della memoria.

Il secondo comando esegue il push di tutti i dati memorizzati nel buffer sul disco. Consente di liberare più memoria cache nel passaggio successivo.

Il terzo comando è il più importante dell'insieme:costringe il kernel a eliminare quanti più dati memorizzati nella cache possibile (cache di pagine, voci di directory, inode, ecc.).

Poi free infine mostra ciò che effettivamente usano i processi in esecuzione nel suo -/+ buffers/cache: linea. È piuttosto evidente che anche dopo aver eliminato tutti i dati memorizzati nella cache, il kernel riavvii rapidamente la memorizzazione nella cache:in questo caso ha già raggiunto quasi 250 MB di dati memorizzati nella cache in pochi secondi.

Il comando finale abilita nuovamente lo spazio di swap - è necessario solo se è stato utilizzato anche il primo comando.

Va notato che questi comandi dovrebbero essere eseguiti dall'utente root per avere i privilegi necessari.


Linux
  1. Come installare l'applicazione Spotify su Linux

  2. Come spegnere o riavviare Linux

  3. Come aggiungere memoria, vCPU, disco rigido alla macchina virtuale KVM Linux

  4. Come calcolare l'utilizzo della memoria in Linux usando sar, ps e free

  5. Come registrare il consumo di memoria su Linux?

Comando gratuito Linux (controlla l'utilizzo della memoria)

Come installare Windows 10 in Virtualbox su Linux

Come cancellare la memoria di scambio in Linux

Come creare una nuova macchina virtuale su Proxmox?

Come disabilitare permanentemente lo scambio in Linux

Esempi di comandi gratuiti in Linux