2011-01-14 21 views
20

Conozco Valgrind, pero solo detecta problemas de administración de memoria. Lo que estoy buscando es una herramienta que me da una visión general, qué partes de mi programa consumen cuánta memoria. Una representación gráfica con, p. un mapa de árbol (como KCachegrind lo hace para Callgrind) sería genial.¿Cómo perfil el uso de la memoria?

Estoy trabajando en una máquina Linux, por lo que las herramientas de Windows no me ayudarán mucho.

Respuesta

20

Use massif, que es parte de las herramientas de Valgrind. massif-visualizer puede ayudarlo a graficar los datos o simplemente puede usar el comando ms_print.

+0

Gracias, las capturas de pantalla se ven muy bien ..., creo que esto es lo que siempre he querido. – math

4

Pruebe el heap profiler entregado con gperftools, por Google. Siempre lo construí desde fuentes, pero está disponible como precompiled package en varias distribuciones de Linux.

Es tan fácil de usar como vincular una biblioteca dinámica a sus ejecutables y ejecutar el programa. Se recopila información sobre cada asignación de memoria dinámica (por lo que he visto) y guardar en disco de un vertedero memoria cada vez que uno de los siguientes casos:

  • HEAP_PROFILE_ALLOCATION_INTERVAL bytes han sido asignados por el programa (por defecto : 1 Gb)
  • las aguas altas de uso de memoria de marca se incrementa en HEAP_PROFILE_INUSE_INTERVAL bytes (por defecto: 100 Mb)
  • HEAP_PROFILE_TIME_INTERVAL segundos han transcurrido (por defecto: inactivo)
  • se llama explícitamente HeapProfilerDump() a partir del código

La última, en mi experiencia, es el más útil porque se puede controlar exactamente cuándo tener una instantánea del uso montón y luego comparar dos instantáneas diferentes y ver lo que está mal.

Finalmente, hay varios posibles formatos de salida, como textual o gráfica (en la forma de un grafo dirigido):

Graph of memory usage

uso de esta herramienta que he sido capaz de detectar usos incorrectos de memoria que No pude encontrar el uso de Massif.

Cuestiones relacionadas