Como analisar o uso da memória?

Estou ciente do Valgrind, mas detecta problemas de gestão de memória. O que estou procurando é uma ferramenta que me dá uma visão geral, quais partes do meu programa consomem quanta memória. Uma representação gráfica com, por exemplo, um mapa de árvore (como KCachegrind faz para Callgrind) seria legal.

estou a trabalhar numa máquina Linux, por isso as ferramentas do windows não me vão ajudar muito.

Author: ismail, 2011-01-14

2 answers

Utilizar massif, que faz parte das ferramentas Valgrind. o massif-visualizador pode ajudá-lo a graficar os dados ou pode apenas usar o comando ms_print.

 25
Author: ismail, 2017-05-19 00:06:18

Experimente o HEAP profiler entregue com gperftools , pelo Google. Eu sempre o construí a partir de fontes, mas ele está disponível como um pacote pré-compilado sob vários distros Linux.

É tão simples de usar como ligar uma biblioteca dinâmica aos seus executáveis e executar o programa. Ele coleta informações sobre cada alocação dinâmica de memória (tanto quanto eu vi) e grava para o disco a dump de memória cada vez que um dos seguintes acontece:

  • HEAP_PROFILE_ALLOCATION_INTERVAL os 'bytes' foram atribuídos pelo programa (por omissão: 1Gb)
  • a marca de Utilização da memória de água elevada aumenta em HEAP_PROFILE_INUSE_INTERVAL bytes (por omissão: 100Mb)
  • HEAP_PROFILE_TIME_INTERVAL decorreram segundos (por omissão: inactivo)
  • você liga explicitamente HeapProfilerDump() do seu código

O último, na minha experiência, é o mais útil porque você pode controlar exatamente quando ter um instantâneo do uso de heap e, em seguida, comparar dois instantâneos diferentes e ver o que se passa?

Eventualmente, existem vários formatos de saída possíveis, como textual ou gráfico (na forma de um gráfico dirigido):

Graph of memory usage

Usando esta ferramenta eu fui capaz de detectar usagens de memória incorretas que eu não conseguia encontrar usando Massif.

 5
Author: Paolo M, 2015-12-03 09:15:37