Come usare la memoria (RAM usata) usando il comando Linux?


30

Sto cercando di recuperare la memoria utilizzata (RAM) in percentuale usando i comandi di Linux. Il mio pannello mostra Memoria utilizzata che devo visualizzare su una determinata pagina Web.

Dai forum, ho scoperto che la memoria corretta può essere trovata da quanto segue:

free -m

Risultato:

-/+ buffers/cache:        492       1555

- / + buffer / cache: contiene l'utilizzo corretto della memoria. Non so come analizzare queste informazioni o se esiste un comando diverso per utilizzare la memoria in percentuale.


3
A cui è già stata data una risposta qui! stackoverflow.com/questions/10585978/... ad esempio: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher

@szboardstretcher Mi piace questo:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me

Senza sapere di cosa hai bisogno il numero, è difficile dirti quale numero dovresti usare. Tuttavia, in molti casi, uno qualsiasi di questi numeri è semplicemente molto ingenuo e richiede informazioni sull'andamento e sul contesto.
Controlla il

Risposte:


33

Ecco un esempio di output gratuito:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

La prima riga di Mem:elenchi di numeri ( )

  • total memoria
  • used memoria
  • free memoria
  • utilizzo di shared
  • utilizzo di buffers
  • cache dei filesystem di utilizzo ( cached)

In questa linea used include i buffer e la cache e questo ha un impatto gratuito. Questa non è la tua "vera" memoria libera perché il sistema scaricherà la cache se necessario per soddisfare le richieste di allocazione.

La riga successiva ( -/+ buffers/cache:) ci fornisce la memoria effettivamente utilizzata e libera come se non ci fossero buffer o cache.

L'ultima riga ( Swap) fornisce l'utilizzo della memoria di scambio. Non esiste alcun buffer o cache per lo scambio poiché non avrebbe senso mettere queste cose su un disco fisico.

Per produrre memoria usata (meno buffer e cache) puoi usare un comando come:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Questo prende la terza linea e divide usato / totale * 100.

E per memoria libera:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

1
"- / + buffer / cache: 5779440 18904464" è l'utilizzo / lo stato della RAM corretto del server?
codelogn,

2
A rigor di termini, no, ma praticamente parlando, sì. L'utilizzo effettivo della memoria è la seconda riga (utilizzata: 20746840) ma parte dell'utilizzo della memoria è costituita da buffer e cache che servono solo ad accelerare i tempi di risposta sul sistema. La terza riga (utilizzata: 5779440) fornisce la quantità di memoria effettivamente utilizzata dai programmi ed è questa cifra di memoria che determina quanto più possono essere allocati dai programmi. Se il tuo obiettivo è quello di ottenere memoria libera / usata nel senso di quali programmi stanno effettivamente usando e cosa puoi effettivamente allocare, allora sì, la riga 3 è corretta per te.
Casey,

1
Si noti che con le versioni più recenti di free, -/+ buffers/cacheviene completamente omesso intenzionalmente e il valore mostrato nella usedcolonna ora esclude i buffer e la cache per impostazione predefinita. Vedi qui: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson

10

Ho intenzione di menzionare come analizzare le informazioni sul freecomando. Per trovare la percentuale, puoi utilizzare come suggerito nelle altre 2 risposte.

Questo è chiaramente spiegato qui . Vorrei provare a spiegare da quello che ho nel mio sistema.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Ora, vediamo cosa rappresentano effettivamente i vari numeri.

Linea 1

  • 7869 Indica la memoria / RAM fisica disponibile per la mia macchina.
  • 4402 Indica la memoria / RAM utilizzata dal mio sistema.
  • 3466 Indica RAM totale libera e disponibile per l'esecuzione di un nuovo processo.
  • 0 Indica la memoria condivisa. Questa colonna è obsoleta e potrebbe essere rimossa nelle versioni future di free.
  • 208 Indica la RAM totale memorizzata nel buffer da diverse applicazioni in Linux.
  • 3497 Indica la RAM totale utilizzata per la memorizzazione nella cache dei dati per scopi futuri.

Linea 2

-/+ buffers/cache:        696       7173

Come calcolare i valori 696 e 7173 ottenuti nella riga 2?

Totale utilizzato ( 4402 ) - Totale buffer RAM ( 208 ) - Il totale RAM per la memorizzazione nella cache ( 3497 ) dovrebbe costituire la RAM effettivamente utilizzata nel sistema. Mi restituisce 697 che è l' output RAM effettivamente utilizzato nella seconda riga.

Ora, Total Available ( 7869 ) - Actual Used ( 696 ) dovrebbe darti la memoria libera che è 7173 in questo caso, che viene anche ottenuta come output nella seconda riga.


6

Sebbene sia un duplicato come indicato da @szboardstretcher, la mia preferenza rispetto alle soluzioni (nella domanda originale) è quella qui sotto, specialmente perché vuoi analizzare una pagina web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Produzione:

used: 82.68%, buffers: 42.81%, swap: 1.27%

4
Cordiali saluti Ottengo quanto segue usando questoused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

Qual è il comando completo utilizzato? L'ho controllato in centos.
Simply_Me

Ci scusiamo per la formattazione ma $ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
eccoti

Per alcune versioni di awk (mawk), il segno di percentuale deve essere raddoppiato per stamparlo, altrimenti awk genera un errore, come questo: printf ("usato:% .0f %%"), $ 3 / $ 2 * 100 Funziona con sia mawk che gawk.
Ján Lalinský

2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Aggiunge una nuova riga dopo il numero di scambio


1

Fino a CentOS 7 Puoi provare

cat /proc/meminfo 

per vedere il reale utilizzo della memoria da parte dei processi.

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.