当我使用TOP命令,我可以得到以下信息:
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
我们可以看到CPU%
是圆的整数,有什么办法,我能得到一个进程的CPU%
以更高的精度?
-对赏金澄清- 亚历
的问题是指Android系统,并且优选地到非根设备。 而Android为Java应用先进的分析技术,原生代码(C ++)的工具是有限的。 在Android top命令允许显示在系统中运行的所有线程的统计信息,包括Java线程和C ++线程。 我在寻找一个答案将与以下寻求帮助:
top -t
我很高兴能得到这个意外的活动,甚至更多的细节,以及Android提供像伟大的助手TraceView Java线程。 任何有关本机代码工具的洞察力,将不胜感激。
你没有提到它在您的文章,但在评论你说,你真的需要每个线程的CPU利用率,而不是每个过程。
如果你不能找到一个工具,是不够准确,你可以直接看在/proc/[pid]/task/[ThreadName]
中所描述的那个人页面/proc
。 这使得在“时钟滴答”消耗的总的CPU时间,因为执行开始。 获得更好的分辨率比这恐怕是很难或不可能。
编辑
从OP的评论,列出了相关信息的命令是:
adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}'
这只是cat
S上的正确/proc
文件到调试主机,它运行一个小awk
程序打印的列的pid
和user time
。 你也可以很容易地使用cut -d " " -f1,14
类似什么perl
拿到列,如果awk
不可用。
试试这个:
ps -eo pcpu,pid,user,args | sort -r -k1 | less
%CPU PID USER COMMAND
9.0 2721 user bash
1.4 956 root ...
0.5 2212 user ...
编辑:
您可以使用adb外壳和busybox的( http://www.busybox.net/downloads/BusyBox.html )
亚行外壳顶部的busybox
c:\ adb push busybox /system/bin
c:\ adb shell
# busybox top
CPU: 2.3% usr 3.1% sys 3.9% nic 90.5% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 1.06 1.66 10.63 1/589 8048
←[7m PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND←[0m
31619 2180 10112 S 217m 67.0 0 3.8 com.mgeek.android.DolphinBrowser.B
2232 2180 1000 S 551m169.6 0 2.6 system_server
8038 8037 0 R 2068 0.6 0 0.8 busybox top
2178 1 0 S 11092 3.3 0 0.6 /system/bin/drexe
6812 2180 10104 S 199m 61.2 0 0.5 android.tether
2291 2180 1001 S 324m 99.8 0 0.3 com.android.phone
2308 2180 10006 S 325m100.0 0 0.1 com.sec.android.app.dialertab
2177 1 1001 S 9624 2.8 0 0.1 /system/bin/rild
5 2 0 SW< 0 0.0 0 0.1 [events/0]
30087 2180 10022 S 358m110.4 0 0.0 com.samsung.vvm
2304 2180 10006 S 311m 96.0 0 0.0 com.sec.android.app.twlauncher
16110 2180 10006 S 296m 91.3 0 0.0 android.process.acore
2445 2180 10006 S 272m 83.8 0 0.0 com.sec.android.provider.logsprovi
8064 2180 10002 S 238m 73.4 0 0.0 com.google.process.gapps
31537 2180 10037 S 227m 69.9 0 0.0 com.google.android.gm
2288 2180 10048 S 221m 68.1 0 0.0 com.swype.android.inputmethod
2285 2180 10013 S 215m 66.3 0 0.0 com.tat.livewallpaper.aurora
30664 2180 10011 S 213m 65.8 0 0.0 com.android.email
31191 2180 10099 S 209m 64.4 0 0.0 com.sirma.mobile.bible.android
2377 2180 10087 S 207m 63.9 0 0.0 android.tts
(来自这里 )
得到了另一个信息线索 :
3)获取CPU信息
〜$亚行外壳cpuinfo中dumpsys
输出:
负载:从42816ms 0.08 / 0.4 / 0.64 CPU使用率前34683ms:system_server:1%= 1%的用户+ 0%的内核/故障:16次要kdebuglog.sh:0%= 0%使用者+ 0%的内核/故障:160次要tiwlan_wq:0%= 0%使用者+ 0%内核usb_mass_storag:0%= 0%使用者+ 0%内核pvr_workqueue:0%= 0%使用者+ 0%内核+睡眠:0%= 0%使用者+ 0%的内核+睡眠:0%= 0%使用者+ 0%内核TOTAL:6%= 1%的用户+ 3%内核+ 0%IRQ
编辑:
您也可以尝试下面的命令: echo $(adb shell ps | grep com.android.phone | awk '{ system("adb shell cat /proc/" $2 "/stat");}' | awk '{print $14+$15;}')
也:
使用顶部:这将显示你的CPU统计top -b -n 1 |grep ^Cpu
用ps:这将显示每个进程的%的CPU使用率。 ps -eo pcpu,pid,user,args | sort -r -k1 | less
EDIT2:
在维吾尔您的意见和赏金描述(?我怎么能猜到哪个线程吃电池),我发现一个有趣的页面:
http://ziyang.eecs.umich.edu/projects/powertutor/
如前所述有:
您可以使用PowerTutor监视任何应用的功耗。
试试这个一个实例,看看它是否符合您的要求。
最后编辑:
检查出的developer.android.com网站Systrace文档:
http://developer.android.com/tools/debugging/systrace.html http://developer.android.com/tools/help/systrace.html
对不起,如果你已经尝试过,但是这是衡量性能的一种具体方法。
使用DDMS和方法分析得到TraceView。
基本上:
- 启动您的应用程序在调试模式
- 在DDMS,在设备选项卡上,单击“启动类型分析”
- 做你的设备上的东西重新要监视的条件
- 点击“停止方法分析”
- 你会得到每个线程的执行相当详细的图表,你可以深入了解
更多详细的活动: http://developer.android.com/tools/debugging/debugging-tracing.html
免责声明 :我只用一个简单的测试应用程序做到了这一点,所以我不知道你会多少里程摆脱它。 它似乎给一点比迄今所描述的更精确,并且不需要root。