獲取Android App cpu佔用率一般有兩種方式,一個是用dumpsys cpuinfo,另一個是top
1、dumpsys cpuinfo命令
Android提供的dumpsys工具可以用於查看系統服務信息與狀態,dumpsys cpuinfo可以用來查看安卓系統當前的cpu使用情況。
adb shell dumpsys cpuinfo
Load: 14.13 / 14.13 / 14.13
CPU usage from 70984ms to 10984ms ago:
1.1% 2635/com.android.browser: 0.7% user + 0.3% kernel / faults: 1 minor
0.8% 247/surfaceflinger: 0.2% user + 0.6% kernel
0.4% 796/system_server: 0.3% user + 0.1% kernel
0.1% 915/com.android.systemui: 0% user + 0% kernel / faults: 30 minor
0.1% 156/bat_thread_kthr: 0% user + 0.1% kernel
0% 1660/com.tencent.mobileqq:MSF: 0% user + 0% kernel / faults: 37 minor
0% 3683/com.tencent.mobileqq: 0% user + 0% kernel
0% 3766/com.android.keyguard: 0% user + 0% kernel / faults: 47 minor
0% 59/hps_main: 0% user + 0% kernel
0% 931/tx_thread: 0% user + 0% kernel
0% 6080/com.oppo.market: 0% user + 0% kernel / faults: 12 minor
0% 233/healthd: 0% user + 0% kernel
0% 285/adbd: 0% user + 0% kernel
0% 744/gsm0710muxd: 0% user + 0% kernel
0% 5270/kworker/u17:2: 0% user + 0% kernel
0% 6556/com.nearme.gamecenter:dcs: 0% user + 0% kernel / faults: 1 minor
0% 3/ksoftirqd/0: 0% user + 0% kernel
0% 53/cfinteractive: 0% user + 0% kernel
0% 89/btif_rxd: 0% user + 0% kernel
0% 131/display_esd_che: 0% user + 0% kernel
0% 284/em_svr: 0% user + 0% kernel
0% 298/mtk_wmtd: 0% user + 0% kernel
0% 738/kworker/u17:3: 0% user + 0% kernel
0% 1073/com.android.phone: 0% user + 0% kernel / faults: 17 minor
0% 1146/com.oppo.launcher: 0% user + 0% kernel / faults: 14 minor
0% 6132/com.oppo.market:dcs: 0% user + 0% kernel / faults: 3 minor
0% 6527/com.nearme.gamecenter: 0% user + 0% kernel / faults: 3 minor
0% 6911/kworker/0:2: 0% user + 0% kernel
+0% 6947/kworker/0:0: 0% user + 0% kernel
3% TOTAL: 1.6% user + 1.3% kernel
1)參數解釋
第一行顯示的是cpuload (負載平均值)信息:Load: 14.13 / 14.13 / 14.13
這三個數字表示逐漸變長的時間段(平均一分鐘,五分鐘和十五分鐘)的平均值,而較低的數字則更好。數字越大表示問題或機器過載。
user 和 kernel分別代表用戶和系統內核分別佔用的cpu比率
user(用戶態): 只能受限的訪問內存, 且不允許訪問外圍設備. 佔用CPU的能力被剝奪, CPU資源可以被其他程序獲取
kernel(內核態): CPU可以訪問內存所有數據, 包括外圍設備, 例如硬盤, 網卡. CPU也可以將自己從一個程序切換到另一個程序
2)爲什麼要有用戶態和內核態
由於需要限制不同的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 併發送到網絡, CPU劃分出兩個權限等級 -- 用戶態 和 內核態
3)應用cpu佔用率
如果想要具體查看某個App的cpu佔用率,可以用命令
adb shell "dumpsys cpuinfo | grep packagename"
以Android自帶瀏覽器爲例,命令爲
adb shell "dumpsys cpuinfo | grep com.android.browser"
2、top
使用命令top-m 10 -s cpu(-t 顯示進程名稱,-s 按指定行排序,-n 在退出前刷新幾次,-d 刷新間隔,-m 顯示最大數量)
參數含義:
PID:progressidentification,應用程序ID
S: 進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。
#THR:程序當前所用的線程數
VSS:VirtualSet Size虛擬耗用內存(包含共享庫佔用的內存)
RSS: ResidentSet Size實際使用物理內存(包含共享庫佔用的內存)
UID:UserIdentification,用戶身份ID
Name:應用程序名稱
如果你想篩選出你自己的應用的話可以用下面命令
top -d 3| greppackageName
3、總結
個人理解:cpuinfo因爲是取一段時間的平均值,而total也是取這段時間的平均值,而非所有進程的平均值之和,所以兩者存在一定差異
1、dumpsys cpuinfo可以用於日常App自動化性能監控、巡檢
2、top命令可以查看瞬時的cpu佔用率,在性能的故障分析調優時可能會更有用
轉存失敗重新上傳取消正在上傳…重新上傳取消正在上傳…重新上傳取消