Android App性能之--cpu佔用率

獲取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佔用率,在性能的故障分析調優時可能會更有用

 

 

 

uploading.4e448015.gif轉存失敗重新上傳取消uploading.4e448015.gif正在上傳…重新上傳取消uploading.4e448015.gif正在上傳…重新上傳取消

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章