adb shell 監控手機cpu使用率
阿新 • • 發佈:2019-01-03
最近在做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 軟中斷時間
第三行資料:
對於4,最終選擇的是這種方式,執行快,而且android monitor 的原始碼中也是用這種方式計算的,以及檢視的其他工具,靠譜。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核手機的執行情況$ 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
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