如何比从TOP命令得到的“CPU%”更高的精度?(How to get higher precisi

2019-08-17 06:20发布

当我使用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线程。 任何有关本机代码工具的洞察力,将不胜感激。

Answer 1:

你没有提到它在您的文章,但在评论你说,你真的需要每个线程的CPU利用率,而不是每个过程。

如果你不能找到一个工具,是不够准确,你可以直接看在/proc/[pid]/task/[ThreadName]中所描述的那个人页面/proc 。 这使得在“时钟滴答”消耗的总的CPU时间,因为执行开始。 获得更好的分辨率比这恐怕是很难或不可能。

编辑

从OP的评论,列出了相关信息的命令是:

adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}' 

这只是cat S上的正确/proc文件到调试主机,它运行一个小awk程序打印的列的piduser time 。 你也可以很容易地使用cut -d " " -f1,14类似什么perl拿到列,如果awk不可用。



Answer 2:

试试这个:

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

(来自这里 )



Answer 3:

得到了另一个信息线索 :

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

对不起,如果你已经尝试过,但是这是衡量性能的一种具体方法。



Answer 4:

使用DDMS和方法分析得到TraceView。

基本上:

  1. 启动您的应用程序在调试模式
  2. 在DDMS,在设备选项卡上,单击“启动类型分析”
  3. 做你的设备上的东西重新要监视的条件
  4. 点击“停止方法分析”
  5. 你会得到每个线程的执行相当详细的图表,你可以深入了解

更多详细的活动: http://developer.android.com/tools/debugging/debugging-tracing.html

免责声明 :我只用一个简单的测试应用程序做到了这一点,所以我不知道你会多少里程摆脱它。 它似乎给一点比迄今所描述的更精确,并且不需要root。



文章来源: How to get higher precision of “CPU%” than that from TOP command?