Comment profiler l'utilisation de la mémoire?

Je suis au courant de Valgrind, mais il détecte juste des problèmes de gestion de la mémoire. Ce que je cherche est un outil qui me donne un aperçu, quelles parties de mon programme consomment combien de mémoire. Une représentation graphique avec par exemple une arborescence (comme KCachegrind pour Callgrind) serait cool.

je travaille sur une machine Linux, donc les outils windows ne m'aideront pas beaucoup.

24
demandé sur ismail 2011-01-14 14:58:54

2 réponses

Utiliser massif, qui fait partie des outils Valgrind. massif-visualiseur peut vous aider à représenter graphiquement les données ou vous pouvez simplement utiliser le ms_print la commande.

25
répondu ismail 2017-05-19 00:06:18

Essayer profileur de tas livré avec gperftools, par Google. Je l'ai toujours construit à partir de sources, mais il est disponible comme un paquet précompilé sous plusieurs distributions Linux.

c'est aussi simple à utiliser que de relier une bibliothèque dynamique à vos exécutables et d'exécuter le programme. Il recueille des informations sur chaque allocation de mémoire dynamique (autant que j'ai vu) et enregistrer sur le disque a vidage de la mémoire à chaque fois que l'un des la suite se passe:

  • HEAP_PROFILE_ALLOCATION_INTERVAL les octets ont été attribués par le programme (par défaut: 1 Go)
  • la marque d'utilisation de la mémoire haute eau augmente de HEAP_PROFILE_INUSE_INTERVAL octets (par défaut: 100 mo)
  • HEAP_PROFILE_TIME_INTERVAL secondes se sont écoulées (par défaut: inactif)
  • vous appelez explicitement HeapProfilerDump() à partir de votre code

le dernier, d'après mon expérience, est le plus utile parce que vous pouvez contrôler exactement quand avoir un instantané du tas utilisation puis comparez deux clichés différents et voyez ce qui ne va pas.

finalement, il y a plusieurs formats de sortie possibles, comme textuel ou graphique (sous forme de graphique dirigé):

Graph of memory usage

en utilisant cet outil, j'ai pu repérer des usages de mémoire incorrects que je n'ai pas pu trouver en utilisant Massif.

5
répondu Paolo M 2015-12-03 09:15:37