adb shell 监控手机cpu使用率

最近在做Android monitor ,利用adb shell 在pc端监测手机,从网上看的资料总结下,备忘。

1.      adb shell dumpsys cpuinfo 得到每个进程使用cpu的详细信息

2.      adb shell top –n 1 | grep proc 获取指定进程的cpu信息

3.      cat  /proc/cpuinfo 获取cpu 硬件信息

4.      cat /proc/stat

目前查到的有以上四种获取cpu信息的方式,对于1,3未做详细研究,后续补充

对于2由于top命令执行时间太久,大概3到4秒,执行结果:

User 29%, System 4%, IOW 0%, IRQ 0%
User 359 + Nice 1 + Sys 52 + Idle 787 + IOW 5 + IRQ 8 + SIRQ 2 = 1214

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
19269  1  25% S   121 3323236K 206268K  fg u0_a98   com.antutu.ABenchMark
  517  3   2% S    82 104372K   1148K  fg root     /system/vendor/bin/thermal-en                                                                                                                           gine
 1255  2   1% S   152 2388920K 143140K  fg system   system_server
  374  1   1% S     1      0K      0K  fg root     msm_thermal:fre

第一行数据(cpu占用率):

User    用户进程 
System  系统进程 
IOW IO等待时间 
IRQ 硬中断时间

第二行数据(cpu使用情况,单位据说是jiffies):

User  处于用户态的运行时间,不包含优先值为负进程 
Nice  优先值为负的进程所占用的CPU时间 
Sys   处于核心态的运行时间 
Idle  除IO等待时间以外的其它等待时间 
IOW   IO等待时间 
IRQ   硬中断时间 
SIRQ  软中断时间

第三行数据:

PID   进程id
PR    优先级
CPU%  当前瞬时CPU占用率
S     进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR  程序当前所用的线程数
VSS   Virtual Set Size  虚拟耗用内存(包含共享库占用的内存)
RSS   Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY   调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID   进程所有者的用户id
Name  进程的名称


对于4,最终选择的是这种方式,执行快,而且android monitor 的源码中也是用这种方式计算的,以及查看的其他工具,靠谱。

$ adb shell cat /proc/stat
cpu  8616133 258931 8249921 30853032 144979 755992 509627 0 0 0
cpu0 1624419 61721 2732353 26158542 135605 494463 322680 0 0 0
cpu1 1652481 59830 2358955 2229236 7529 155560 96846 0 0 0
cpu2 2676653 73144 1663307 1306790 876 58651 52434 0 0 0
cpu3 2662580 64236 1495306 1158464 969 47318 37667 0 0 0
intr 423574039 0 0 0 41675528 0 21889144 729961 5 4 5 8096 0 0 0 0 314 473 0 1891 516482 0 0 11171628 0 0 0 0 127752 39799 8755299 299379 0 2 0 0 0 0 9939721 0 0 0 0 0 67091 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471664 708335 7571004 16602123 0 0 0 0 35 4522234 0 291 82 0 0 0 0 0 0 0 11028 1 0 0 0 0 0 0 0 0 109 1 3 12 0 0 0 8 0 0 0 0 68 0 68 0 0 153 0 0 0 62 0 0 0 0 0 0 0 1026 0 413 0 0 0 0 0 43 0 0 0 0 0 4477092 0 0 0 0 0 0 0 1550 0 0 143756 7 7 7 0 0 0 0 0 0 0 15517 3949201 0 333 1 0 1 22 0 8 0 5318 8 31708 14 0 14 5544 383 2155 712722 183889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246235 0 0 0 0 12601 94475 0 324 0 5 0 69 0 0 0 0 0 0 0 0 0 115 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7938 490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1885 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3729 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 155646 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18152006 0 105 799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1086 0 0 0 0 0 0 0 0 0 0
ctxt 862498687
btime 1479122422
processes 789948
procs_running 4
procs_blocked 0
softirq 193635390 305292 39873286 732253 2713236 305292 305292 30544250 30361992 86707 88407790
以上为4核手机的执行情况

cpu  8616133 258931 8249921 30853032 144979 755992 509627 0 0 0
红色字体数字表示的含义:
- user     从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。 
- nice      从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
- system      从系统启动开始累计到当前时刻,处于核心态的运行时间 
- idle      从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间 
- iowait     从系统启动开始累计到当前时刻,IO等待时间 
- irq       从系统启动开始累计到当前时刻,硬中断时间
- softirq    从系统启动开始累计到当前时刻,软中断时间
后面三个0的字段含义:
- steal: involuntary wait
- guest: running a normal guest
- guest_nice: running a niced guest
cpu利用率的计算:
取很短相邻时间内的两次以上数据
cpu_total=user+nice+system+idle+iowait+irq+soft(据说后面为0的三可能会不为0,但是没遇到过,遇到再补充)
cpu_rate=((cpu_total2-cpu_total1)-(idle2-idle1))/((cpu_total2-cpu_total1))
备注:以上是参考中文各个网站的资料
stackoverflow上,有另一种计算方式,相似但是不完全一致,计算cpu_total时,没有加iowait,但加了steal
http://stackoverflow.com/questions/23367857/accurate-calculation-of-cpu-usage-given-in-percentage-in-linux
评论中的参考资料,写的有理有据,觉得比上一种计算方式更可靠,但只有how没有why





  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: adb shell 是 Android Debug Bridge(ADB)的一部分,它允许用户通过命令行与 Android 设备进行交互。通过 adb shell,用户可以在设备上运行命令和脚本,以执行各种任务。 编写手机脚本可以帮助用户自动化执行一些重复性的任务,例如安装应用程序、备份数据、截屏等。编写脚本需要了解 adb shell 的基本命令和语法,以及 Android 设备的文件系统结构和应用程序包名等信息。 一些常用的 adb shell 命令包括: - adb shell ls:列出当前目录下的文件和文件夹。 - adb shell cd:切换当前目录。 - adb shell mkdir:创建一个新的文件夹。 - adb shell rm:删除指定的文件或文件夹。 - adb shell am start:启动一个应用程序。 - adb shell input tap:模拟触摸屏幕上的一个点。 - adb shell input text:模拟输入文本。 编写手机脚本可以使用任何文本编辑器,例如 Notepad++、Sublime Text 等。脚本通常以 .sh 或 .bat 扩展名保存,并使用 adb shell 命令来执行脚本中的命令。例如,以下是一个简单的脚本,用于启动一个名为 com.example.app 的应用程序: ``` #!/bin/bash adb shell am start -n com.example.app/.MainActivity ``` 在执行脚本之前,需要确保 Android 设备已连接到计算机,并且已启用 USB 调试模式。可以使用以下命令检查设备是否已连接: ``` adb devices ``` 如果设备已连接,则会显示设备的序列号和状态。如果设备未连接,则需要将设备连接到计算机,并在设备上授权 USB 调试模式。 总之,编写手机脚本可以帮助用户自动化执行各种任务,提高工作效率。需要注意的是,编写脚本需要谨慎操作,以避免意外删除或修改设备上的重要文件。 ### 回答2: adb shell 是 Android Debug Bridge(ADB)的命令行工具,可以与 Android 设备通信并执行命令。使用 adb shell 编写手机脚本可以实现自动化操作,提高工作效率。 首先需要在计算机上安装 Android SDK,并将 adb 工具添加到环境变量中。然后将 Android 设备连接到计算机,确保开启了 USB 调试模式。 接下来可以使用 adb shell 命令执行各种操作,例如启动应用、模拟触摸操作、截图等。例如,以下是一个简单的示例脚本,用于启动浏览器应用、输入网址并模拟点击搜索按钮: ``` #!/bin/bash adb shell am start -n com.android.chrome/com.google.android.apps.chrome.Main sleep 5 adb shell input text "www.google.com" adb shell input tap 1080 1000 ``` 该脚本使用 adb shell am start 命令启动 Chrome 浏览器应用,并等待 5 秒钟以确保应用已完全启动。然后使用 adb shell input 命令模拟输入文本和点击操作,以搜索指定的网址。 当然,这只是一个简单的示例脚本,实际应用的情况可能更加复杂。可以结合 shell 脚本语言的各种控制语句、函数和变量等功能,编写更加强大的手机脚本。 需要注意的是,使用 adb shell 编写手机脚本需要一定的技术水平和经验,同时也需要在执行过程中仔细检查和处理可能出现的错误和异常情况。因此,建议在实际使用前进行充分的测试和调试,并查阅相关文档和教程,以确保脚本的安全和可靠性。 ### 回答3: adb shell是Android Debug Bridge(Android调试桥)的命令行接口,可让开发者和测试人员与连接到计算机上的Android设备交互。它提供了许多功能,包括访问设备文件系统、运行设备上的进程、安装和卸载应用程序等等。在这些基础的操作上,我们可以通过编写手机脚本来完成自动化测试和其他一些任务。以下是一些编写手机脚本的技巧和注意事项: 1. 选择合适的脚本语言。我们可以使用诸如Python、Perl或Shell等语言编写adb shell脚本。选择哪种语言应取决于开发人员的熟悉程度和项目要求。 2. 学会adb shell基本命令。在编写脚本之前,我们需要熟悉adb shell的基本命令,如dir,ls,ps等等。 3. 将脚本分组。通常,我们将相关的adb shell命令组合在一起,并将其放入一个脚本文件中。例如,我们可以编写一个文件,其中包含安装应用程序并运行设备上的特定应用程序的adb shell命令。 4. 了解变量和循环。为了在脚本中实现可重用性,我们需要使用变量和循环。我们可以在脚本中定义变量,然后将变量值传递给adb shell命令。 5. 注意设备权限。在使用adb shell时,我们需要确认我们是否具有对设备所有权限。如果我们没有设备的Root访问权限,我们可能无法运行某些adb shell命令。 总之,编写手机脚本可以帮助我们自动化许多重复性的任务,并提高我们的工作效率。在编写脚本时,我们需要了解基本adb shell命令,学习脚本语言知识,了解变量和循环,并注意设备权限。通过这些技巧,我们可以轻松地编写能够提高开发工作效率的手机脚本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值