2009-02-18 11 views
10

Esistono strumenti disponibili in Linux che visualizzano graficamente o testualmente l'utilizzo della memoria per un programma? Ad esempio, se scrivo un programma C++ e vorrei verificare che gli oggetti siano allocati e deallocati correttamente nella memoria, ci sono applicazioni disponibili che mostrerebbero visivamente gli oggetti che vengono istanziati e cancellati? Quando mi sono abituato a programmare in Visual Studio, ricordo di passare da un programma e utilizzare un pannello di debug per monitorare l'utilizzo della memoria e sto cercando qualcosa di simile a quello in Linux.controlla l'utilizzo della memoria di un programma in Linux

risposta

10

Non è esattamente quello che stai cercando, ma dai uno sguardo allo Valgrind.

+0

Buon consiglio. Sembra uno strumento molto utile! – Chris

+2

Con --tool = massif che si ottiene un grafico visivo dell'utilizzo della memoria. –

+1

"valgrind - il tuo nuovo migliore amico" – LiraNuna

3

Normalmente eseguo in alto per tenere d'occhio l'utilizzo complessivo della memoria.

0

conky (screenshots) è un ottimo semplice visualizzatore di risorse del computer che posta sullo sfondo del desktop. Tengo d'occhio l'uso della memoria e l'uso specifico del programma.

2

È molto difficile calcolare la quantità di memoria utilizzata da un processo su un sistema operativo che supporta la memoria virtuale.

Il problema non sta calcolando la quantità di memoria utilizzata, ma quanto è privato e quanto condiviso.

È possibile visualizzare/proc/pid/maps o/proc/pid/smaps (forse). Questi file ti diranno solo quanta memoria il processo ha mappato nel suo spazio di indirizzamento, non quanto lo sta usando, e sicuramente non quanto sia condiviso con altri processi nel sistema.

Anche le mappe "private" possono essere condivise perché fork() esegue la copia su scrittura, quindi una pagina privata può ancora essere condivisa con un altro processo (correlato - di solito padre o fratello). Inoltre, le pagine che sono state mappate ma mai utilizzate non consumano affatto spazio.

L'RSS (dimensione del set residente) di ogni mappatura può essere visto, ma questo indica solo quanto è residente (in RAM, invece di essere scambiato in un file di scambio, non ancora assegnato, o non ancora richiesto- caricato da un file mappato), ora quanto è condiviso e con cosa.

Credo che la soluzione migliore sarebbe quella di contare la quantità di memoria anonima privata, che potrebbe essere ok, in alcuni casi.

2

1) Prima esecuzione

ps -u <your user id> 

2) Ottenere et pid del processo che si desidera monitorare dall'uscita del 1)

3) Poi gestita

top -p <the pid of the process you want to monitor> 
3
while (/proc/<pid>/status) 
echo "VMSize: `ps -p <pid> -o vsize=`" >> ! mem.out 
pstack <pid> >> mem.out 
sleep 10 
end 

grep VMSize mem.out | awk -F':' '{print $2}' | sort -r -n | head -1 ti darà la memoria di picco.

Utilizzare anche mem.out per visualizzare il footprint della memoria e la correlazione dello stack corrente.

Problemi correlati