2009-12-08 18 views
26

Esiste una soluzione pronta all'uso per registrare il consumo di memoria dall'inizio del sistema? Vorrei registrare i dati in un semplice file di testo o in un database in modo da poterli analizzare in un secondo momento.Come registrare il consumo di memoria su Linux?

Sto lavorando su un sistema embedded basato su Linux 2.4. Devo eseguire il debug del problema relativo al consumo di memoria. La mia applicazione si avvia automaticamente all'avvio di ogni sistema. Ho bisogno del modo di ottenere i dati con data e ora da intervalli regolari (il più spesso possibile), così posso rintracciare il problema.

I sintomi del mio problema: all'avvio del sistema ha lanciato la mia applicazione principale e la GUI per visualizzare i parametri principali del sistema. GUI basata su GTK + (server X). Se disattivo la GUI e il server X, la mia applicazione funziona correttamente. Se abilito la GUI e il server X, non funziona quando ho 256 MiB o 512 MiB di memoria fisica installati sulla scheda madre. Se ho 1 GB di memoria installata, allora tutto è OK.

+0

Questo sembra simile a questa domanda: http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process – monksy

+0

Does la tua app funziona almeno per un po 'prima di bloccarsi? –

+0

Sì, le versioni precedenti vengono eseguite correttamente nello stesso sistema. Ora sviluppiamo una nuova versione e iniziamo a risolvere questo problema. – bialix

risposta

23

Un piccolo script come

rm memory.log 
while true; do free >> memory.log; sleep 1; done 
+0

anzi, questo è molto vicino a quello di cui ho bisogno. Posso aggiungere timestamp da solo. – bialix

+9

'free -s 1> memory.log'; questo non incide nei costi di lancio di un nuovo processo ogni secondo.Tuttavia, non ha il timestamping. (So ​​che questo è un vecchio post, ma stavo cercando la stessa cosa, e così anche gli altri). –

+1

In alcune versioni di free è necessario specificare il numero di volte che si desidera stampare con -c a causa di un bug. Altrimenti mostra l'errore libero: argomento secondi '1 'fallito – Sputnik

2

Si potrebbe mettere qualcosa di simile

vmstat X >> mylogfile 

in uno script di avvio. Poiché la tua applicazione è già in fase di avvio, puoi aggiungere questa riga alla fine dello script di inizializzazione che l'applicazione sta già utilizzando. (dove X è # di secondi tra i messaggi di log)

+0

Grazie per il suggerimento, anche se ho bisogno di registrare i dati più spesso ogni secondo. – bialix

3

C'è un programma chiamato

sar 

su sistemi * nix. Potresti provare a usarlo per monitorare l'utilizzo della memoria. Prende le misure a intervalli regolari. Do a

man sar 

per ulteriori dettagli. Penso che l'opzione -r per prendere misure di memoria, -i per specificare l'intervallo che desideri.

+1

Decisamente più potente delle altre soluzioni proposte, anche se un po 'più ingombrante da configurare. – Ale

4

Credo che l'aggiunta di una voce di crontab sarà sufficiente

*/5 * * * * free -m >> some_output_file 

Ci sono altri strumenti come SeaLion, New Relic, Server Density ecc che quasi fanno lo stesso, ma sono molto più facili da installare e configurare. Il mio preferito è SeaLion, in quanto è gratuito e offre anche una fantastica visualizzazione cronologica delle uscite raw dei comuni comandi di linux.

+0

+1 per Sealion, la registrazione/EVER più veloce. L'intera cosa che penso mi ha portato a circa 6 secondi - ho digitato la mia email, una password. Incollato un singolo comando in ssh e boom sono comparse le mie statistiche. – rgvcorley

17

Il seguente script stampa timestamp e un'intestazione.

#!/bin/bash -e 

echo "  date  time $(free -m | grep total | sed -E 's/^ (.*)/\1/g')" 
while true; do 
    echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m | grep Mem: | sed 's/Mem://g')" 
    sleep 1 
done 

L'output è simile a questo (testato su Ubuntu 15.04, 64 bit).

 date  time   total  used  free  shared buffers  cached 
2015-08-01 13:57:27   24002  13283  10718  522  693  2308 
2015-08-01 13:57:28   24002  13321  10680  522  693  2308 
2015-08-01 13:57:29   24002  13355  10646  522  693  2308 
2015-08-01 13:57:30   24002  13353  10648  522  693  2308 
Problemi correlati