Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获得更高的“精度”;CPU%";而不是最高指挥部?_Android_Linux_Cpu Usage - Fatal编程技术网

Android 如何获得更高的“精度”;CPU%";而不是最高指挥部?

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

当我使用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++)的工具有限 > <>强>命令可以显示系统中所有线程的统计数据,包括java线程和C++线程。我正在寻找有助于以下任务的答案:

我的应用程序在后台处于非活动状态时使用2%的CPU,但应低于0.1%。如果我运行
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和方法分析来获得跟踪视图

基本上:

  • 在调试模式下启动应用程序
  • 在DDMS中的“设备”选项卡中,单击“启动方法评测”
  • 在设备上执行一些操作,以重新创建要监视的条件
  • 单击“停止方法分析”
  • 您将获得一个相当详细的图形,其中包含每个线程的执行情况,您可以深入了解这些执行情况
  • 详情如下:

    免责声明:我只使用了一个简单的测试应用程序,所以我不知道你能从中获得多少里程。它似乎比目前描述的要精确一些,并且不需要root


    您在帖子中没有提到这一点,但您在评论中说,您确实需要每个线程的CPU利用率,而不是每个进程

    如果找不到足够准确的工具,可以直接查看中所述的
    /proc/[pid]/task/[ThreadName]
    。这将给出自执行开始以来以“时钟信号”为单位消耗的CPU总时间。要获得比这更好的分辨率可能很困难或不可能

    编辑

    根据OP的评论,列出相关信息的命令如下:

    adb shell cat /proc/${pid}/task/*/stat | awk -F\ '{print $1, $14}' 
    
    这只是将正确的
    /proc
    文件发送到调试主机,调试主机运行一个微小的
    awk
    程序