2009-10-14 11 views
0

Comment obtenir la consommation de mémoire par thread d'un processus sous Linux? Je comprends que nous pouvons utiliser/proc/pid/tâche/tid/statm, mais cela n'aide pas mon cas. Tous les threads affichent la même valeur et sont identiques à ceux de PID.consommation de mémoire de niveau de thread de processus

Nous pouvons faire valgrind mais je ne cherche pas de lecture/écriture ou de fuites. Valgrind ne m'indiquera aucune information de niveau de fil.

D'autres suggestions?

EDIT: Comment profiler mon code? Combien de mémoire a été allouée dans quelle fonction/numéro de ligne, etc.?

+1

Eh bien, sur le plan conceptuel, toutes les discussions ont accès au même pool de mémoire, alors ils utilisent tous la même quantité. Ce que vous voulez suivre est le nombre d'allocations par thread - et je ne pense pas que glibc ou le noyau le fasse. Et considérez: comment comptez-vous un bloc de mémoire alloué dans un thread et libéré dans un autre? –

+0

Je peux écrire un wrapper au-dessus de malloc qui peut collecter des stats mais c'est difficile si je suis en train de profiler énormément de code avec beaucoup de malloc. – Jack

+0

Que diriez-vous d'utiliser un wrapper autour de malloc qui appelle 'gettid (2)'? De cette façon, vous pouvez garder le même code appelant tout en gardant la trace du thread qui appelle le wrapper. –

Répondre

2

Tous les threads partagent le même espace d'adressage et utilisent le même tas, donc, sauf pour leur pile, ils doivent tous montrer la même utilisation de la mémoire.

+0

Merci pour la réponse. Permettez-moi de reformuler ma question puis: Comment puis-je profiler mes binaires au niveau du thread? Je veux dire, combien de mémoire a été alloué à quel point dans le code? Mes threads ne partagent généralement pas les blocs de mémoire. Ils partagent juste des fds, des fichiers IPC, etc. – Jack

+0

acceptant ceci comme étant la seule réponse que j'ai eu de toute façon: D Je suis d'accord avec le fait qu'il montre la même utilisation mem. Je ne pouvais pas faire beaucoup plus que ça .. – Jack

0

Il y a une option dans Linux pour voir l'utilisation du niveau de fil de cpu et de la mémoire

Vous pouvez utiliser la commande top avec option -H et -p

top -H -p<PID> 

commande liste le résultat avec en-tête suivant et vous devriez lire PID en tant que TID (identifiant de thread) dans ce cas.

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND` 

Dans le cas d'un processus java, il est tout à fait évident de voir ce qui suit. Si vous créez un vidage de fil d'un processus et de convertir l'ID de fil pour vous décimal peut correspondre à la TID figurant dans la production de top -H -p <PID>

Pour

Questions connexes