Comment faire pour obtenir une plus grande précision de “CPU%” que celle du HAUT commandement?
Lorsque j'utilise la commande TOP, j'ai pu obtenir les informations suivantes:
shell@android:/ $ top -n 1
User 31%, System 10%, IOW 0%, IRQ 0%
User 346 + Nice 10 + Sys 120 + Idle 637 + IOW 6 + IRQ 0 + SIRQ 2 = 1121
PID PR CPU% S #THR VSS RSS PCY UID Name
481 1 26% S 89 762832K 81688K fg system system_server
1699 0 5% S 27 676472K 39092K fg u0_a72 wm.cs.systemmonitor
11243 0 3% S 28 673140K 29796K bg u0_a111 com.weather.Weather
13327 2 1% S 23 680472K 35844K bg u0_a83 com.rhmsoft.fm
659 0 1% S 17 663044K 33136K bg u0_a13 android.process.media
20260 1 0% R 1 1208K 508K shell top
Nous pouvons voir la CPU%
est arrondie à l'entier, est-il possible que je puisse obtenir un processus de CPU%
avec plus de précision?
-- Précisions sur la générosité -- Alex
La question fait référence à système Android, et de préférence à un non-dispositif enracinée. Alors que Android offre des fonctions avancées des techniques de profilage pour les applications Java, des outils pour le code natif (C++) sont limitées. haut commande sur Android vous permet d'afficher les statistiques pour tous les threads en cours d'exécution dans le système, les deux threads Java et C++ threads. Je suis à la recherche d'une réponse qui va aider à la quête suivante:
Mon application utilise 2% de CPU quand il est inactif en arrière-plan, alors qu'il devrait être en dessous de 0,1%. Si je run top -t
, j'obtiens 0% pour l'ensemble des 15 threads qui appartiennent à mon processus (certains threads les threads Java, par exemple, la main, le thread d'INTERFACE utilisateur; d'autres sont pthreads que jamais attacher à la JVM). Comment puis-je suppose que le thread qui mange de la batterie?
Je serais heureux d'obtenir encore plus de détails à ce sujet inattendu de l'activité, et Android offre une grande helpers comme TraceView pour les threads Java. Toute réflexion sur les outils de code natif sera fortement appréciée.
Oui, c'est de faire la différence. Sinon, merci de m'aider le profil de l'application qui utilise 2% de CPU en arrière-plan. Quand je lance
top -t
, j'obtiens 0% pour l'ensemble des 15 threads qui appartiennent à mon processus. Comment puis-je suppose que le thread qui mange de la batterie?user568109: de 15 threads, tous à 0%. Mais ensemble, ils donnent tout à fait significative de 2%. Certains threads de Java, et il y a des outils du kit SDK de surveiller leur comportement. D'autres sont en C++, et je voulais l'obtenir à partir d'une simple
top
commande assez hibts pour m'aider à trouver les 2 qui sont responsables de la plupart de la consommation.définitivement, c'est un bug dans mon application. Mais une complète révision du code qui permettrait de résoudre la question est au-delà de mes capacités. Si je pouvais me concentrer sur un seul thread, il deviendrait possible.
veuillez fournir une Réponse avec le contenu de votre commentaire, il mérite le bounty. La ligne de commande est
adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}'
(notez que awk s'exécute sur l'ordinateur hôte).
OriginalL'auteur JackWM | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Vous ne le mentionnez pas dans votre post, mais dans le commentaire que vous avez dit que vous avez vraiment besoin de l'utilisation de l'UC par thread, pas par processus.
Si vous ne pouvez pas trouver un outil qui est assez précis, vous pouvez regarder directement dans
/proc/[pid]/task/[ThreadName]
comme décrit dans la page de manuel de/proc
. Ce qui donne le total des temps CPU consommé dans les "ticks" étant donné que l'exécution a commencé. Obtenir une meilleure résolution que c'est sans doute difficile, voire impossible.Modifier
De l'OP commentaire, une commande qui liste les informations pertinentes:
Ce juste
cat
s le bon/proc
fichiers de débogage de l'hôte, qui dirige une petiteawk
programme pour imprimer les colonnes pourpid
etuser time
. Vous pouvez également utiliser facilementcut -d " " -f1,14
ou quelque chose de semblable dansperl
pour obtenir les colonnes siawk
n'est pas disponible./proc/<pid>/schedstat
et/proc/<pid>/task/<tid>/schedstat
). Les trois domaines sont les suivants: temps passé sur le CPU, le temps passé à attendre un runqueue; # de timeslices exécuter sur le PROCESSEUR. Certains fabricants de ne pas activer cette fonction dans le noyau.OriginalL'auteur Gene
Essayez ceci:
EDIT:
Vous pouvez utiliser adb shell et busybox (http://www.busybox.net/downloads/BusyBox.html)
adb shell busybox haut
(Prises de ici)
J'ai juste édité ma réponse 🙂
Cool. Devrait avoir ajouté: "dans un non racinées de l'appareil"
OriginalL'auteur Alberto Megía
A obtenu cette information à partir d'un autre fil:
3) l'Obtention d'info CPU
~$ adb shell dumpsys cpuinfo
De sortie:
Charge: 0.08 /0.4 /0.64
Utilisation du PROCESSEUR à partir 42816ms à 34683ms il y a:
system_server: 1% = 1% + 0% kernel /défauts: 16 mineur
kdebuglog.sh de: 0% = 0% + 0% kernel /défauts: 160 mineur
tiwlan_wq: 0% = 0% + 0% d'amande
usb_mass_storag: 0% = 0% + 0% d'amande
pvr_workqueue: 0% = 0% + 0% d'amande
+sleep: 0% = 0% + 0% d'amande
+sleep: 0% = 0% + 0% d'amande
TOTAL: 6% = 1% + 3% d'amande + 0% irq
EDIT:
Vous pouvez également essayer cette commande:
echo $(adb shell ps | grep com.android.phone | awk '{ system("adb shell cat /proc/" $2 "/stat");}' | awk '{print $14+$15;}')
Aussi:
à l'aide de haut : Cela va vous montrer le cpu stats
top -b -n 1 |grep ^Cpu
aide ps: Cela va vous montrer le % d'utilisation du processeur pour chaque processus.
ps -eo pcpu,pid,user,args | sort -r -k1 | less
EDIT2:
En relation pour vos commentaires et la générosité description (Comment puis-je suppose que le thread qui mange de la batterie?) J'ai trouvé une page intéressante:
http://ziyang.eecs.umich.edu/projects/powertutor/
Comme indiqué là:
Essayez ceci pour une instance et voir si elle répond à vos exigences.
FINAL EDIT:
Découvrez la Systrace de la documentation sur le developer.android.com site:
http://developer.android.com/tools/debugging/systrace.html
http://developer.android.com/tools/help/systrace.html
Je suis désolé si vous avez déjà essayé, mais c'est une méthode concrète pour mesurer la performance.
BTW,
ps
sur mes appareils ne prend pas en charge-eo
.re: PowerTutor - il ne fournit pas par thread résolution. Mais il donne certainement beaucoup de renseignements utiles, par exemple, Wi-Fi ou l'affichage de la consommation d'énergie par l'application.
re: systrace. Je suis heureux que vous avez mentionné ici, car il faut rappeler encore et encore sur les puissants outils de profilage disponible pour Android JVM. Malheureusement, il ne fournit pas d'informations sur les pthreads.
OriginalL'auteur g00dy
Utilisation DDMS et de la méthode de profilage pour obtenir un TraceView.
En gros:
Plus de détails ici:
http://developer.android.com/tools/debugging/debugging-tracing.html
Avertissement: je ne l'ai fait avec une simple application de test donc je ne sais pas combien de miles vous obtiendrez hors de lui. Il ne semble pas donner un peu plus de précision que ce qui a été décrit jusqu'à présent, et ne nécessite pas de racine.
OriginalL'auteur Ken Wolf