藉助getprop、dumpsys來了解一些系統相關信息。java
1、getpropandroid
adb shell cat /system/build.prop 文件中存放的是用於啓動系統時須要的配置文件,一般能夠經過命令getprop獲取,setprop設置。shell
adb shell getprop就是將配置文件裏的信息讀取出來並通過整理後,並以字典的形式展現給用戶的。app
它的格式以下:
getprop [key] 取得對應的key的屬性值
getprop 列出全部配置屬性值
若是要修改屬性的話,很簡單,只需修改字典值就能夠了,如:
setprop [key] [value] 設置指定key的屬性值;
watchprops 監聽系統屬性的變化,若是期間系統的屬性發生變化則把變化的值顯示出來
其實這三個命令都是toolbox的子命令,若是有興趣的能夠看在android源碼中看到其對應的源碼:system/core/toolbox/iphone
adb shell getprop 查看機器的所有信息參數
adb shell getprop ro.serialno 查看機器的序列號
adb shell getprop ro.carrier 查看機器的CID號
adb shell getprop ro.hardware 查看機器板子代號
adb shell getprop ro.bootloader 查看SPL(Hboot)版本號socket
adb shell getprop dhcp.wlan0.ipaddress 得到IPide
adb shell getprop ro.sf.lcd_density 得到屏幕密度ui
adb shell getprop ro.serialno 查看serial numberspa
adb shell getprop|grep heapgrowthlimit
查看單個應用程序最大內存限制
線程
adb shell getprop|grep dalvik.vm.heapstartsize 查看
應用啓動後分配的初始內存
adb shell getprop|grep dalvik.vm.heapsize 查看
單個java虛擬機最大的內存限制
2、dumpsys
dumpsys 命令用來查看每一個服務的運行狀況。
常見的Service:
DMAgent NvRAMAgent SurfaceFlinger accessibility account activity alarm appwidget audio audioprofile backup battery batteryinfo bluetooth bluetooth_a2dp bluetooth_profile_manager bluetooth_socket clipboard connectivity content country_detector cpuinfo device_policy devicestoragemonitor diskstats drm.drmManager dropbox entropy gfxinfo hardware input_method iphonesubinfo isms location media.audio_flinger media.audio_policy media.camera media.mdp_service media.player meminfo memory.dumper mount mtk-agps mtk-epo-client netpolicy netstats network_management notification oppo.com.IRUtils package permission phone power samplingprofiler search sensorservice simphonebook statusbar telephony.registry telephony.registry2 textservices throttle uimode usagestats usb vibrator wallpaper wifi wifip2p window
adb shell dumpsys window 或者adb shell dumpsys window displays 查看設備的分辨率
adb shell dumpsys meminfo $package_name or $pid 經過使用程序的包名或者進程id,查看某一程序的內存使用狀況
3、top
adb shell top -m 5 -s cpu 查看前5個進程cup的使用狀況
日誌說明:
User 35%, System 13%, IOW 0%, IRQ 0% // CPU佔用率 User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用狀況 PID CPU% S #THR VSS RSS PCY UID Name // 進程屬性 xx xx% x xx xx xx xx xx xx CPU佔用率: User 用戶進程 System 系統進程 IOW IO等待時間 IRQ 硬中斷時間 CPU使用狀況(指一個最小時間片內所佔時間,單位jiffies。或者指所佔進程數): User 處於用戶態的運行時間,不包含優先值爲負進程 Nice 優先值爲負的進程所佔用的CPU時間 Sys 處於核心態的運行時間 Idle 除IO等待時間之外的其它等待時間 IOW IO等待時間 IRQ 硬中斷時間 SIRQ 軟中斷時間 進程屬性: PID 進程在系統中的ID CPU% 當前瞬時因此使用CPU佔用率 S 進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。 #THR 程序當前所用的線程數 VSS Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存) RSS Resident Set Size 實際使用物理內存(包含共享庫佔用的內存) PCY OOXX,不知道什麼東東 UID 運行當前進程的用戶id Name 程序名稱android.process.media // ps:內存佔用大小有以下規律:VSS >= RSS >= PSS >= USS // PSS Proportional Set Size 實際使用的物理內存(比例分配共享庫佔用的內存) // USS Unique Set Size 進程獨自佔用的物理內存(不包含共享庫佔用的內存)
咱們通常觀察Uss來反映一個Process的內存使用狀況,Uss 的大小表明了只屬於本進程正在使用的內存大小,這些內存在此Process被殺掉以後,會被完整的回收掉,
Vss和Rss對查看某一Process自身內存情況沒有什麼價值,由於他們包含了共享庫的內存使用,而每每共享庫的資源佔用比重是很大的,這樣就稀釋了對Process自身建立內存波動。 而Pss是按照比例將共享內存分割,某一Process對共享內存的佔用狀況。
so
查看USS和PSS可使用adb shell procrank,前提是手機須要root
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell procrank |grep xiami
若是隻是查看PSS也可使用adb shell dumpsys meminfo
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ adb shell dumpsys meminfo fm.xiami.main|grep TOTAL TOTAL 143070 15312 130020 135179 122279 12667
舒適提示:
在取內存數據前能夠前判斷一下手機是否root, 若是root了取USS比較好一些,若是沒有root取PSS也是能夠的。