Explication détaillée pour le profil de “adb shell dumpsys meminfo my-app-name”?
Quelqu'un peut-il me donner une explication détaillée sur le profil obtenu par adb shell dumpsys meminfo my-app-name
?
Le résultat est tout aussi ci-dessous comme il est mentionné dans Comment puis-je découvrir l'utilisation de la mémoire de mon application dans Android?:
** MEMINFO in pid 890 [process-name] **
native dalvik other total
size: 10940 7047 N/A 17987
allocated: 8943 5516 N/A 14459
free: 336 1531 N/A 1867
(Pss): 4585 9282 11916 25783
(shared dirty): 2184 3596 916 6696
(priv dirty): 4504 5956 7456 17916
Objects
Views: 149 ViewRoots: 4
AppContexts: 13 Activities: 0
Assets: 4 AssetManagers: 4
Local Binders: 141 Proxy Binders: 158
Death Recipients: 49
OpenSSL Sockets: 0
SQL
heap: 205 dbFiles: 0
numPagers: 0 inactivePageKB: 0
activePageKB: 0
Quel est le chaque colonne (natif, dalvik, autres, total)? et surtout de ce qui est "l'autre" dans la colonne (je ne peux pas comprendre ce que d'ailleurs natif et dalvik)?
Ce serait génial si quelqu'un peut donner un exemple concret d'élaborer à ce sujet.
par exemple, j'ai une application A. a a son propre objet obj_private et sa propre bibliothèque native lib_private. En outre, Une référence à l'objet de Android cadre obj_shared et certains lib native d'Android cadre lib_shared. Et obj_shared de référence de certains lib native d'Android lib_shared_indirect. Pour ce cas, puis-je dire?
- La "taille totale" est égal à la totalité de la mémoire utilisée par les "obj_private + lib_private + obj_shared + lib_shared + lib_shared_indirect".
- Le "private sale" est égal à la mémoire salis par "obj_private + lib_private"
La raison pour laquelle nous voulons qu'il soit clair à ce sujet est: il y a quelques inhabituelle à l'exécution de la mémoire de l'augmentation de notre dernière version de l'application par rapport à la version précédente. Et quand j'ai utilisé le dumpsys meminfo, j'ai trouvé les colonnes "indigènes" et les "autres" ont augmenté de façon spectaculaire. Mais le changement de la nouvelle version est uniquement lié à java et il n'y a pas d'expliquer au sujet de l ' "autre" de la colonne. J'ai googlé ce et n'a trouvé aucun document. J'ai aussi essayé de lire le code source de la bad. Mais j'ai trouvé qu'il est facile de se perdre dans le code source pour les débutants comme moi. Donc je poste cette question ici au cas où que quelqu'un peut vous aider.
OriginalL'auteur user1802093 | 2012-11-06
Vous devez vous connecter pour publier un commentaire.
Nous avons maintenant plus de documentation couvrant RAM sous Android qui va dans le détail sur ce que les différentes RAM, les chiffres sont: La gestion de la Mémoire de Votre Application. En particulier, avoir un regard sur le milieu de la page ici qui aborde les principales parties de la meminfo dump: Enquêter sur Votre Utilisation de la RAM.
Il ressemble à votre meminfo de sortie est assez ancienne version d'Android, avant que l'on puisse identifier un grand nombre de différents types d'allocations. À la carte ce que vous voyez à la documentation en cours, il suffit de considérer les "autres" pour être tout ce que les modernes dump montre d'ailleurs l'origine et dalvik sections. À votre décharge, je crois que votre dalvik section est en fait le moderne "Dalvik Tas" et "Dalvik Autres.
Autant que les autochtones ainsi que d'autres sections de plus en plus après seulement un changement dans le code Java, oui cela peut certainement se produire. Un certain nombre de pièces de l'Android API Java se trouve sur le dessus de native allocations, et peut également causer d'autres allocations. L'exemple classique de ce serait bitmaps sur pain d'épice et les versions antérieures, où les données de l'image bitmap, qui était originaire de l'allocation plutôt que d'être un tableau des affectations dans le tas Java comme il l'est aujourd'hui.
L'augmentation de vos autres allocations peuvent être dues à un certain nombre de choses que vous verrez répertoriés dans les versions les plus récentes des données -- la mémoire de sauvegarde de curseurs, de mémoire partagée zones de ashmem, dispositifs d'allocation des choses pour vous, comme des images de textures, etc. Il y a tellement de choses qu'il peut être difficile de dire ce qui pourrait se passer, c'est pourquoi le rapport est plus détaillé de ces journées. (Et même là, nous avons encore un certain nombre de choses qui se sont effondrés dans d'inconnu.)
Pour le débogage de cela, vous devriez regarder votre tas Java pour les objets de fuite. Depuis l'attribution réelle de l'objet n'est pas dans le tas Java, cela peut être difficile, bien sûr. Je vous suggère de prendre un tas de vidage au début de votre application, n'importe quoi qui provoque son empreinte RAM pour augmenter, prendre un tas de vidage après que, et de regarder pour quel objet, les chiffres ont augmenté. Référencé dans la documentation montre comment comparer tas dumps avec MATT.
Également lorsque vous êtes à la recherche à votre Java heap tout comme une analyse générale (sauf lors des diff), assurez-vous de toujours suivre les instructions pour enlever le zygote partie du tas. Comme la documentation mentionne, chaque processus dispose d'un grand nombre d'allocations de zygote, mais ceux-ci sont partagés entre tous les processus, de façon généralement pas pertinents pour des tas d'analyse. J'ai très souvent voir les gens concernés parce qu'ils voient d'un très grand nombre de très grandes images bitmap dans leur application que le système semble avoir affecté sur eux, et pense que c'est la chose principale à l'aide de la RAM dans leur application, quand il ne l'est pas, c'est juste le des allocations communes de zygote.
OriginalL'auteur