Domanda Come posso monitorare l'utilizzo della memoria?


ho usato top per vedere l'utilizzo della memoria al momento. Ma vorrei monitorare l'utilizzo della memoria per un periodo di tempo. E.g avvia il monitoraggio e quindi esegue alcuni comandi, e interrompe definitivamente il monitoraggio e vede quanta memoria è stata usata durante il periodo.

Come posso farlo su Ubuntu Server?

Immagino che potrei avviare un cronjob ogni 5 secondi circa, e invocare un comando che registra l'utilizzo della memoria corrente in un file di testo. Ma quale comando dovrei usare per ottenere l'utilizzo della memoria corrente in un formato che è facile da registrare in un file di testo?


235
2017-10-26 16:50


origine




risposte:


Raccomando di combinare le risposte precedenti

watch -n 5 free -m

Nota che a Linux piace usare qualsiasi memoria extra per cache dei blocchi del disco rigido. Quindi non vuoi guardare solo il libero Mem. Vuoi guardare il free colonna del -/+ buffers/cache: riga. Questo mostra quanta memoria è disponibile per le applicazioni. Quindi ho appena corso free -m e ottenuto questo:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

So che sto usando 1528 MB e avere 2170 MB gratuito.

Nota: Per fermare questo watch ciclo puoi semplicemente premere Ctrl+C.


290
2017-10-26 17:40



Grazie, questo è informativo. Ma sulla colonna usata che hai prima 2896 e poi 1528 per i buffer, questo non significa che stai usando 2896 + 1528? - Jonas
Mem: used è la tua memoria totale utilizzata. -/+ buffers/cache: used è la tua memoria totale utilizzata meno buffer e cache. So che l'output sembra divertente, ma qui non è richiesta l'aritmetica. Stai solo cercando / used nella riga - / + buffer / cache. - Justin Force
L'opzione -h è molto più bella - frmdstryr
@frmdstryr Un buon punto! -h / - L'umano non esisteva quando ho scritto questo, però. gitlab.com/procps-ng/procps/commit/... - Justin Force
@ cbradsh1 Si può solo fare free -h, per esempio. watch -n 5 free -h per ottenere l'output "leggibile", ad es. 2.1G invece di 2170 nell'output. - Justin Force


credo htop è la soluzione migliore.

  • sudo apt-get install htop

In questo modo noterai quali programmi utilizzano la maggior parte della RAM. e puoi facilmente terminarne uno se vuoi. Ecco uno screenshot!


191
2018-05-18 00:11



htop è bello perché è più "grafico" e forse più facile da leggere di free. - mjswensen
non capisco l'output. È RES la memoria utilizzata da quell'applicazione in MB? Allora cos'è SHR? - faizal
@faizal: memoria virtuale, riservata e condivisa. - WitchCraft
come fa htop mostra "l'uso della memoria in un periodo di tempo"? - dangel
htop -s M_SHARE htop -s TIME - Tomachi


Se stai cercando una bella ripartizione della memoria utilizzata da ogni processo in esecuzione, allora potrei consigliarti di fare il check-out ps_mem.py (trovato Qui a pixelbeat.org).

Lo so nei commenti sopra, hai detto di volere uno snapshot di una sola riga gratuito, ma ho pensato che altri potrebbero trovare questo utile.

Esempio di output:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

L'unica parte che non mi piace è il fatto che lo script afferma di richiedere i privilegi di root. Non ho ancora avuto l'opportunità di vedere esattamente perché questo è il caso.


38
2017-10-26 17:19



Mi chiedo se la memoria sia condivisa tra i thread. È condiviso tra processi, non è vero? Almeno su Windows ... - Thomas Weller
In questo caso, la memoria condivisa si riferisce a pagine mappate da più processi sotto forma di librerie condivise. Inoltre, nel contesto di un'applicazione multi-thread, l'intero spazio di memoria del processo è accessibile da tutti i thread in quel processo. - Jason Mock
Ora disponibile in PyPI (pip install ps_mem) e su GitHub. - Leif Arne Storset
@ThomasWeller: Sì, i thread condividono sempre la memoria, mentre i processi possono condividerne alcuni o tutti in determinate condizioni. - Leif Arne Storset
per questo io uso gnome-system-monitor - jms


Usa il gratuito comando. Ad esempio, questa è l'uscita di free -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ restituirà solo la seconda riga:

-/+ buffers/cache:        947       1064

22
2017-10-26 17:27



Grazie, sembra fantastico. Così questo 947 è l'utilizzo della memoria meno la memoria utilizzata per i buffer e le cache? - Jonas


Il orologio il comando può essere utile. Provare watch -n 5 free per monitorare l'utilizzo della memoria con aggiornamenti ogni cinque secondi.


9
2018-01-19 20:09



Grazie, è stato fantastico! Tuttavia, preferirei ottenere l'utilizzo della memoria su una singola riga, quindi è facile accedere a un file di testo. - Jonas


Per il monitoraggio visivo dell'uso generale della RAM, se si utilizza Byobu, manterrà l'utilizzo della memoria nell'angolo in basso a destra del terminale e funzionerà mentre ci si trova in una sessione di terminale.

Come si può vedere dallo screenshot, la mia macchina virtuale ha un tempo di funzionamento di 1h3m, carico 0,00, ha un processore a 2,8 GHz (virtuale) e 994 MB (21%) della RAM disponibile sul sistema.

Byobu in use


4
2018-04-16 19:15





Puoi farlo usando cat /proc/meminfo.

enter image description here


3
2017-09-27 13:30



aggiungere un orologio alla parte anteriore di questo comando lo rende fantastico! come in watch cat /proc/meminfo - Elder Geek
Il free comando prende le sue informazioni da /proc/meminfo e li presenta in modo compatto. Uso free -h per l'output leggibile dall'uomo. - LoMaPh


Soluzione a linea singola e uscita:

free -m | grep "Mem:"

Ecco un esempio dell'output atteso:

enter image description here


3
2017-10-26 18:01



Questo ti permetterà anche di vedere l'utilizzo della memoria al momento ... - mook765


io userei cactus. Questo grafico l'utilizzo della memoria ecc. Per un periodo di tempo, e sarete in grado di controllare l'utilizzo utilizzando il browser web.


1
2017-10-22 15:32





Monitoraggio dell'uso della memoria

Sono più in linea con uno dei post precedenti che citava Cacti come un ottimo modo per monitorare l'utilizzo della memoria. Tuttavia, dal momento che sembra che il cactus non sia più popolare nel mainstream, esiste un'applicazione grafica alternativa chiamata Graphite.

La grafite è relativamente facile da installare su un server Ubuntu e per installarla, è possibile controlla questo link per le procedure di installazione facili da seguire.

Dopo aver installato la grafite, ora è possibile inviare metriche di memoria ad esso, a qualsiasi intervallo desiderato; ogni 5 secondi, ogni minuto, ogni ora ecc.

Per rappresentare graficamente le metriche della memoria, come già suggerito nei post precedenti, puoi scrivere il tuo script usando gli strumenti di sistema per raccogliere le informazioni necessarie sulla memoria. Oppure, puoi usare un plugin snmp pre-scritto che farà tutto il lavoro per te.

Se si desidera scrivere il proprio script di memoria, sarà saggio assicurarsi dell'account per la memoria bufferizzata e memorizzata nella cache durante il calcolo della memoria utilizzata, altrimenti si finirà col raccogliere dati falsi.

Se invece desideri utilizzare un plugin snmp che già fa tutti i calcoli necessari per te, ecco un link a uno che funziona piuttosto bene: checkMemoryviaSNMP.

A favore di SNMP:

Ho snmp installato su tutti i nodi remoti che monito. Questo mi permette di monitorare tutti i miei sistemi da un server centrale (s), senza dover copiare o mettere un plugin sui nodi remoti.

Contro di SNMP:

Dovresti assicurarti di agente snmp è installato su ciascuno dei nodi remoti su cui si desidera monitorare la memoria. Tuttavia, questa installazione sarà un affare una tantum. Se stai utilizzando strumenti di automazione come chef o burattini o strumenti simili nel tuo ambiente, allora questo non è affatto un problema.

Configurazione dell'agent SNMP sui nodi remoti:

Dopo aver installato l'agente snmp, basta vi il file /etc/snmpd/snmpd.conf e aggiungere questa riga ad esso:

rocommunity  (specify-a-community-string-aka-password-here)

Quindi riavviare l'agente snmpd, con:

/etc/init.d/snmpd restart

Quindi, sul tuo server centrale, dal quale dovrai invece monitorare tutti gli altri server, puoi eseguire il seguente comando:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s

1