3 votes

Outil d'analyse de la mémoire "en direct" pour Android

Existe-t-il un outil de profilage de la mémoire "en direct" (similaire à Instruments dans XCode) pour Android ? La plupart des recherches sur le profilage de la mémoire me conduisent à Memory Analyzer Tool (qui est excellent), mais j'apprécierais beaucoup un outil qui puisse me montrer dynamiquement quelles classes consomment (et libèrent) de la mémoire pendant le cycle de vie de mon application, au fur et à mesure qu'elle s'exécute.

Note : Je suis no Je cherche un outil de profilage de la mémoire pour Android (Memory Analyzer Tools fonctionne très bien pour moi). Toutes les méthodes/outils que j'ai rencontrés prennent un instantané du tas et le sauvegardent dans un fichier. Je cherche un outil qui fournisse un compteur/une mise à jour en temps réel de la portion du tas utilisée par divers objets, et qui soit mis à jour sur une base de seconde/sous-seconde. Il est possible que cela ne soit pas possible avec Android. Cependant, je n'ai pas trouvé de réponse définitive dans un sens ou dans l'autre.

1voto

Kenny Points 3588

Regardez cette vidéo aquí à environ 35 minutes, ils montrent comment profiler votre application, pas sûr que vous puissiez le faire "en direct".


Plus d'informations d'après cet article sur milk.com :

Je n'ai pas essayé depuis Android 1.6 et je ne suis pas sûr que vous puissiez le faire en direct, mais vous aviez l'habitude de générer des données de tas par :

Obtenir un shell de commande sur l'appareil :

$ adb shell

Vous pouvez vérifier que vous vous exécutez en tant que Root à l'aide de la commande id. La réponse devrait ressembler à uid=0(Root) gid=0(Root). Si ce n'est pas le cas, tapez su et réessayez. Si su échoue, vous n'avez pas de chance.

Ensuite, assurez-vous que le répertoire cible existe :

# mkdir /data/misc
# chmod 777 /data/misc

Utilisez ps ou DDMS pour déterminer l'ID du processus de votre application, puis envoyez un SIGUSR1 au processus cible :

# kill -10 <pid>

Le signal provoque un GC, suivi d'un heap dump (pour être tout à fait précis, ils se produisent en fait simultanément, mais les résultats du heap dump reflètent l'état post-GC). Cela peut prendre quelques secondes, vous devez donc surveiller le message du journal de GC pour savoir quand il est terminé.

Suivant :

# ls /data/misc/heap-dump*
# exit

Utilisez ls pour vérifier les noms de fichiers, puis exit pour quitter le shell de commande du périphérique.

Vous devriez voir deux fichiers de sortie, nommés /data/misc/heap-dump-BLAH-BLAH.hprof et .hprof-head, où BLAH est une valeur générée par le temps d'exécution qui garantit que le nom du fichier est unique. Retirez-les du périphérique et supprimez la copie côté périphérique :

$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof tail.hprof
$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof-head head.hprof
$ adb shell rm /data/misc/heap-dump-BLAH-BLAH.hprof /data/misc/heap-dump-BLAH-BLAH.hprof-head

Fusionnez-les et supprimez les intermédiaires :

$ cat head.hprof tail.hprof > dump.hprof
$ rm head.hprof tail.hprof

Vous avez maintenant le dump hprof dans dump.hprof.

Le format du fichier de données a été légèrement augmenté par rapport au format commun hprof, et en raison des restrictions de licence, l'outil hat modifié ne peut pas être distribué. Un outil de conversion, hprof-conv, peut être utilisé pour supprimer les parties spécifiques à Android de la sortie. Cet outil a été inclus pour la première fois dans la version 1.5, mais il fonctionnera avec les versions antérieures d'Android.

La sortie convertie devrait fonctionner avec n'importe quel analyseur de données hprof, y compris jhat, qui est disponible gratuitement dans le JDK de Sun, et Eclipse MAT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X