2009-02-18 7 views
10

¿Hay alguna herramienta disponible en Linux que muestre gráficamente o textualmente el uso de memoria para un programa? Por ejemplo, si escribo un programa C++ y me gustaría verificar que los objetos se estén asignando y desasignando correctamente en la memoria, ¿hay aplicaciones disponibles que muestren visualmente los objetos que se están instanciando y eliminando? Cuando solía programar en Visual Studio, recuerdo recorrer un programa y usar un panel de depuración para monitorear el uso de la memoria y estoy buscando algo similar a eso en Linux.supervisa el uso de la memoria de un programa en Linux

Respuesta

10

No es exactamente lo que está buscando, pero eche un vistazo a Valgrind.

+0

Buena sugerencia. ¡Parece una herramienta muy útil! – Chris

+2

Con --tool = macizo se obtiene un gráfico visual del uso de la memoria. –

+1

"valgrind - tu nuevo mejor amigo" – LiraNuna

3

Normalmente ejecuto arriba para controlar el uso general de la memoria.

0

conky (screenshots) es un gran visor de recursos informáticos simple que se publica sobre el fondo de escritorio. Vigilo el uso de la memoria y el uso específico del programa.

2

Es realmente difícil calcular cuánta memoria está usando un proceso en un sistema operativo que admite memoria virtual.

El problema no es calcular cuánta memoria está usando, sino cuánto de eso es privado y cuánto se comparte.

Puede ver/proc/pid/maps o/proc/pid/smaps (tal vez). Estos archivos solo le informarán la cantidad de memoria que el proceso ha mapeado en su espacio de direcciones, no la cantidad que está usando, y definitivamente no cuánto se comparte con otros procesos en el sistema.

Incluso los mapas "privados" se pueden compartir porque fork() hace copy-on-write, por lo que aún se puede compartir una página privada con algún otro proceso (relacionado - generalmente padre o hermano). Además, las páginas que han sido mapeadas pero nunca utilizadas no consumirán espacio.

Se puede ver el RSS (tamaño de conjunto residente) de cada asignación, pero eso solo le dice cuánto es residente (en RAM, en lugar de intercambiarlo en un archivo de intercambio, aún no asignado, o aún no demandado- cargado desde un archivo asignado), ahora cuánto se comparte y con qué.

Supongo que su mejor opción sería contar la cantidad de memoria privada anónima, lo que podría estar bien, en algunos casos.

2

1) Primera corrida

ps -u <your user id> 

2) Obtener et pid del proceso que desea supervisar desde la salida de la 1)

3) A continuación, ejecute

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 le dará memoria máxima.

También use mem.out para ver la huella de memoria y la correlación de la pila actual.

Cuestiones relacionadas