Android 如何获得更高的“精度”;CPU%";而不是最高指挥部?
当我使用TOP命令时,我可以获得以下信息:Android 如何获得更高的“精度”;CPU%";而不是最高指挥部?,android,linux,cpu-usage,Android,Linux,Cpu Usage,当我使用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
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++)的工具有限top-t
,那么属于我的进程的所有15个线程都会得到0%(有些线程是Java线程,例如主UI线程;其他线程是从不连接到JVM的pthreads)。我怎么能猜出哪根线吃了电池
我很高兴能得到关于这个意外活动的更多细节,Android为Java线程提供了很好的帮助。如果您对本机代码工具有任何见解,我们将不胜感激。请尝试以下方法:
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 shell和busybox()
adb外壳总线箱顶部
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
c:\adb推送busybox/system/bin
c:\adb外壳
#汇流箱顶部
CPU:2.3%usr 3.1%sys 3.9%nic 90.5%空闲0.0%io 0.0%irq 0.0%sirq
平均负荷:1.06 1.66 10.63 1/589 8048
←[7m PID PPID用户统计VSZ%MEM CPU%CPU命令←[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系统_服务器
8038 8037 0 R 2068 0.6 0 0.8汇流箱顶部
2178 1 0 S 11092 3.3 0 0.6/系统/bin/drexe
6812 2180 10104 S 199m 61.2 0 0.5安卓.tether
2291 2180 1001 S 324m 99.8 0.3 com.android.phone
2308 2180 10006 S 325m100.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.1[事件/0]
30087 2180 10022 S 358m110.4 0 0.0 com.samsung.vvm
2304 2180 10006 S 311m 96.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 com.google.android.gm
2288 2180 10048 S 221m 68.1 0.0 com.swype.android.inputmethod
2285 2180 10013 S 215m 66.3 0 0.0 com.tat.livewallper.aurora
30664 2180 10011 S 213m 65.8 0.0 com.android.email
31191 2180 10099 S 209m 64.4 0 0.0 com.sirma.mobile.bible.android
2377218010087S207M63.900.0android.tts
(摘自)从另一方获得此信息: 3) 获取CPU信息 ~$adb外壳转储系统cpuinfo 输出: 载荷:0.08/0.4/0.64 从42816ms到34683ms之前的CPU使用率: 系统_服务器:1%=1%用户+0%内核/故障:16次 kdebuglog.sh:0%=0%用户+0%内核/错误:160次 tiwlan_wq:0%=0%用户+0%内核 usb存储:0%=0%用户+0%内核 pvr_工作队列:0%=0%用户+0%内核 +睡眠:0%=0%用户+0%内核 +睡眠:0%=0%用户+0%内核 总计: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;}')
此外:
使用top:这将显示cpu统计信息
top-b-n1 | grep^Cpu
使用ps:这将显示每个进程的cpu使用率百分比。
ps-eo pcpu,pid,用户,参数|排序-r-k1 |更少
EDIT2:
根据您的评论和赏金描述(我怎么能猜出哪个线程吃了电池?),我发现了一个有趣的页面:
如上所述:
您可以使用PowerTutor来监视任何设备的功耗
应用程序
对一个实例试试这个,看看它是否满足您的需求
最终编辑:
查看developer.android.com网站上的Systrace文档:
如果您已经尝试过,我很抱歉,但这是衡量性能的一种具体方法。使用DDMS和方法分析来获得跟踪视图 基本上:
您在帖子中没有提到这一点,但您在评论中说,您确实需要每个线程的CPU利用率,而不是每个进程 如果找不到足够准确的工具,可以直接查看中所述的
/proc/[pid]/task/[ThreadName]
。这将给出自执行开始以来以“时钟信号”为单位消耗的CPU总时间。要获得比这更好的分辨率可能很困难或不可能
编辑
根据OP的评论,列出相关信息的命令如下:
adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}'
这只是将正确的/proc
文件发送到调试主机,调试主机运行一个微小的awk
程序