adb shell top 命令【實時的對系統處理器的狀態監視】


原文地址https://blog.csdn.net/kittyboy0001/article/details/38562515

原文地址https://blog.csdn.net/u010503912/article/details/51518705

adb shell top

top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序.

top 用法

復制代碼
>adb shell top -h
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [-t ] [ -h ]
    -m num  Maximum number of processes to display. 最多顯示多少個進程
    -n num  Updates to show before exiting.  刷新次數 
    -d num  Seconds to wait between updates. 刷新間隔時間(默認5秒)
    -s col  Column to sort by (cpu,vss,rss,thr). 按哪列排序 
    -t      Show threads instead of processes. 顯示線程信息而不是進程
    -h      Display this help screen.  顯示幫助文檔 
復制代碼

 

adb shell top

復制代碼
> adb shell top

User 13%, System 5%, IOW 0%, IRQ 0%
User 85 + Nice 0 + Sys 37 + Idle 509 + IOW 0 + IRQ 0 + SIRQ 0 = 631

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
22205  0  13% S    56 423416K  88160K  fg u0_a92   com.tmall.wireless
24310  1   2% R     1   1232K    536K     root     top
22600  0   1% S    46 341712K  40872K  fg u0_a90   com.wandoujia.phoenix2.usbproxy
31125  1   1% S    31 319976K  33284K  fg u0_a74   com.android.Chinpower
 1533  0   1% S    32  67320K  20552K  fg system   /system/bin/surfaceflinger
 1852  0   1% S   112 445876K  80304K  fg system   system_server
    ...
   10  0   0% S     1      0K      0K     root     watchdog/0
   16  1   0% S     1      0K      0K     root     khelper
   22  1   0% S     1      0K      0K     root     suspend_sys_syn
   23  1   0% S     1      0K      0K     root     suspend
第一組數據的含義: 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 進程的名稱


Tasks: 552 total,   1 running, 510 sleeping,   0 stopped,   0 zombie 
任務(進程) 系統現在共有552個進程,其中處於運行中的有1個,510個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。

Mem:   5849960k total,  4014628k used,  1835332k free,     5756k buffers   
內存狀態: 物理內存總量 (5.6G)  使用中的內存總量  空閑內存總量 緩存的內存量
1TB=1024GB ,1GB=1024MB ,1MB=1024KB ,1KB=1024字節。

Swap:  2293756k total,  1039804k used,  1253952k free,   918600k cached 
swap交換分區: 交換區總量  使用的交換區總量  空閑交換區總量  緩沖的交換區總量

如果出於習慣去計算可用內存數,這里有個近似的計算公式:
Mem的free + Mem的buffers + Swap的cached
按這個公式此台服務器的可用內存:1835332k + 5756k + 918600k = 2759688k(約2.6G)

800%cpu  13%user   0%nice  31%sys 756%idle   0%iow   0%irq   0%sirq   0%host   
cpu狀態 
800%cpu -- CPU總量
13%user -- 用戶空間占用CPU的百分比。
0%nice -- 改變過優先級的進程占用CPU的百分比
31%sys -- 內核空間占用CPU的百分比
756%idle -- 空閑CPU百分比
0%iow  --  IO等待占用CPU的百分比
0%irq -- 硬中斷(Hardware IRQ)占用CPU的百分比
0%sirq --  軟中斷(Software Interrupts)占用CPU的百分比
0%host --

 

PID — 進程id
USER — 進程所有者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
%CPU — 上次更新到現在的CPU時間占用百分比
%MEM — 進程使用的物理內存百分比
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)

  PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS                                                 
25059 shell        20   0  10M 2.4M 1.5M R 25.0   0.0   0:00.08 top
20678 u0_a21       20   0 4.5G  27M  23M S  9.3   0.4   0:02.56 com.google.android.gms.unstable
24458 root         20   0    0    0    0 S  3.1   0.0   0:01.81 [kworker/u16:4]
24367 root         20   0    0    0    0 S  3.1   0.0   0:03.28 [kworker/2:1]
1092 system       18  -2 4.9G 184M  90M S  3.1   3.2 417:44.25 system_server
復制代碼

 

具體信息可以查看源代碼中: xx\system\core\toolbox\top.c

監控CPU的命令使用實戰

復制代碼
>adb shell top  | findstr tmall > d:\cpu.txt   
打印 top命令,並查找 包含 tmall的命令行,輸出至 d:\cpu.txt

result:

22137  1   0% S    10 304728K  28900K  bg u0_a92   com.tmall.wireless:push

22205  0   0% S    15 322944K  38236K  bg u0_a92   com.tmall.wireless

22205  1  27% R    34 345304K  49396K  fg u0_a92   com.tmall.wireless

22112  1   0% S     9 303704K  29380K  bg u0_a92   com.tmall.wireless:containerprocess1

22137  1   0% S    10 304728K  28900K  bg u0_a92   com.tmall.wireless:push

22252  1   0% S     9 302600K  28596K  fg u0_a92   com.tmall.wireless:notify

22205  0  45% R    40 365500K  56708K  fg u0_a92   com.tmall.wireless

22252  0  22% S    19 325476K  40868K  bg u0_a92   com.tmall.wireless:notify

22137  0   2% S    14 308944K  31320K  fg u0_a92   com.tmall.wireless:push

22112  0   0% S     9 305892K  29888K  bg u0_a92   com.tmall.wireless:containerprocess1

22137  1  14% S    17 323080K  39696K  bg u0_a92   com.tmall.wireless:push

22252  0   3% S    21 327656K  41556K  bg u0_a92   com.tmall.wireless:notify

22205  1   2% S    38 366420K  59700K  fg u0_a92   com.tmall.wireless

22112  0   0% S     9 305892K  29888K  bg u0_a92   com.tmall.wireless:containerprocess1

22408  0   0% R     9 278424K  21936K  fg u0_a92   com.tmall.wireless:utremote

22408  1   7% S     9 304180K  30964K  bg u0_a92   com.tmall.wireless:utremote

22205  0   2% R    39 367456K  59612K  fg u0_a92   com.tmall.wireless
復制代碼

 



======================================================================================================

android調試之top指令查看系統資源

為了有效地排除CPU資源消耗問題,對top指令進行了研究,本文不會面面俱到地談top指令各種參數的使用,而是選擇部分比較實用的參數來談談調試的一些技巧。
在 ubuntu 系統輸入top -h,可以看到 top 的使用方法。
omj@pc-ubuntu:~$top -h
procps-ng version 3.3.9
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
 
這里我們主要是談 top 指令在 android 系統下的使用,所以首先要用 usb 線連接PC和設備,然后進入android設備的 shell,查看 top 指令的相關用法。
 
查看android設備是否被PC機識別:
omj@pc-ubuntu:~$adb devices
List of devices attached
d111a8ac device
 
進入android設備的shell:
omj@pc-ubuntu:~$adb shell
root@msm8610:/ #
查看 top 指令的幫助菜單:
root@msm8610:/ #top -h
 
 
從幫助菜單可以看出,PC級別的系統的 top 指令和 android 設備的 top 指令的使用方法還是有點區別的。
 
top指令查看進程資源:
root@msm8610:/ #top
 
每隔 3s 更新一次顯示:
root@msm8610:/ #top -d 3
 
按cpu大小列出5個進程列表:
root@msm8610:/ #top -m 5
 
 
根據進程的名字使用 grep 指令過濾輸出 "com.hcb.parking" 進程的信息(圖中實際上是每隔 1s 輸出一次信息):
root@msm8610:/ #top -d 1 | grep "com.hcb.parking"
 
 
 
查看"com.hcb.parking" 應用(或者說"com.hcb.parking" 進程)中所有線程的CPU等信息:
root@msm8610:/ #top -d 1 -t | grep "com.hcb.parking"
 
 
每間隔 3s 將 "com.hcb.parking" 進程的CPU 信息保存到文件:
root@msm8610:/ #top -d 3 | grep "com.hcb.parking" > /data/topinfo.txt &
 
從android設備中將上一步保存的 topinfo.txt 日志信息復制出來(該命令是在退出adb shell 之后執行的):
omj@pc-ubuntu:~/work$ adb pull /data/topinfo.txt .
 
 
【備注】
如無法查看cpu信息,則需要先運行打印信息指令:
adb root
adb remount
adb shell "echo 1 117000 0 mtktscpu-sysrst 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 0 0 no-cooler 1000 1 > /proc/driver/thermal/tzcpu"
adb shell "cat /proc/thermlmt"
adb shell "echo 4 4 > /proc/ppm/policy/ut_fix_core_num"
adb shell "echo 0 0 > /proc/ppm/policy/ut_fix_freq_idx"
adb shell "cat /sys/devices/system/cpu/online"
adb shell "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu6/cpufreq/scaling_cur_freq"
adb shell "cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_cur_freq"
@pause
【復制上段代碼,建文本並且保存為.bat文件即可直接運行 打印信息指令】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM