Android使用procrank和dumpsys meminfo 、top分析內存占用情況


如果你想查看所有進程的內存使用情況,可以使用命令procrank、dumpsys meminfo查看,當然也只可以過濾出某個進程如:dumpsys meminfo | grep -i phone

先來看下procrank

 1 sh-4.2# procrank  
 2   PID      Vss      Rss      Pss      Uss  cmdline  
 3  1078   59840K   59708K   42125K   39344K  com.csr.BTApp  
 4  2683   59124K   59040K   37960K   33032K  com.android.launcher  
 5  1042   51572K   51488K   35686K   33604K  android.process.acore  
 6   782   32808K   32748K   16775K   14716K  system_server  
 7   667   20560K   17560K   12739K    8940K  /system/bin/surfaceflinger  
 8   851   30124K   30036K   12085K    7996K  com.android.systemui  
 9  2999   27680K   27596K    9929K    7040K  com.baidu.input  
10   959   20764K   20676K    5522K    3788K  com.android.phone  
11  3468   21892K   21800K    4591K    1920K  com.apical.dreamthemetime  
12   982   19880K   19792K    4438K    2644K  com.csr.csrservices  
13   668   19592K   19480K    3525K    1360K  zygote  
14   670    2960K    2960K    2407K    2356K  /system/bin/mediaserver  
15   663    1784K    1784K    1209K    1116K  /system/bin/synergy_service  
16   756    3404K    1348K    1133K    1124K  /usr/bin/gpsexe  
17   669    1468K    1468K     959K     928K  /system/bin/drmserver  
18   675     692K     692K     692K     692K  /bin/sh  
19   758    1060K    1060K     630K     604K  /system/bin/audiotransfer  
20  3482     656K     652K     456K     444K  procrank  
21   664     664K     664K     403K     392K  /system/bin/netd  
22   658     584K     584K     331K     320K  /system/bin/vold  
23   666     548K     548K     270K     256K  /system/bin/rild  
24   671     416K     412K     212K     204K  /system/bin/dbus-daemon  
25   673     336K     332K     170K     164K  /system/bin/keystore  
26     1     164K     164K     144K     144K  /init  
27   674     152K     152K     136K     136K  /sbin/adbd  
28   662     312K     312K     112K     104K  /system/bin/dvdd  
29   672     328K     324K     109K     100K  /system/bin/installd  
30   657     268K     264K     102K      96K  /system/bin/servicemanager  
31   649      84K      84K      84K      84K  /sbin/ueventd  
32   665     260K     256K      83K      76K  /system/bin/debuggerd  
33                           ------   ------  ------  
34                          195031K  163724K  TOTAL  
35   
36 RAM: 480380K total, 3624K free, 732K buffers, 299788K cached, 264844K shmem, 7632K slab

 

從以上打印可以看出,一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)是單個進程全部可訪問的地址空間
RSS - Resident Set Size 實際使用物理內存(包含共享庫占用的內存)是單個進程實際占用的內存大小,對於單個共享庫, 盡管無論多少個進程使用,實際該共享庫只會被裝入內存一次。
PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
USS - Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)USS 是一個非常非常有用的數字, 因為它揭示了運行一個特定進程的真實的內存增量大小。如果進程被終止, USS 就是實際被返還給系統的內存大小。
USS 是針對某個進程開始有可疑內存泄露的情況,進行檢測的最佳數字。懷疑某個程序有內存泄露可以查看這個值是否一直有增加

 

使用dumpsys meminfo查看內存信息

 

 

 1 sh-4.2# dumpsys meminfo  
 2 Applications Memory Usage (kB):  
 3 Uptime: 3353863 Realtime: 3353850  
 4   
 5 Total PSS by process:  
 6     41743 kB: com.csr.BTApp (pid 1078)  
 7     36924 kB: com.android.launcher (pid 2683)  
 8     35452 kB: android.process.acore (pid 1042)  
 9     16094 kB: system (pid 782)  
10     11609 kB: com.android.systemui (pid 851)  
11      8564 kB: com.baidu.input (pid 2999)  
12      5298 kB: com.android.phone (pid 959)  
13      4443 kB: com.apical.dreamthemetime (pid 4448)  
14      4203 kB: com.csr.csrservices (pid 982)  
15      4130 kB: com.apical.apicalradio (pid 4518)  
16   
17 Total PSS by OOM adjustment:  
18     16094 kB: System  
19                16094 kB: system (pid 782)  
20     21110 kB: Persistent  
21                11609 kB: com.android.systemui (pid 851)  
22                 5298 kB: com.android.phone (pid 959)  
23                 4203 kB: com.csr.csrservices (pid 982)  
24     36924 kB: Foreground  
25                36924 kB: com.android.launcher (pid 2683)  
26     85759 kB: Perceptible  
27                41743 kB: com.csr.BTApp (pid 1078)  
28                35452 kB: android.process.acore (pid 1042)  
29                 8564 kB: com.baidu.input (pid 2999)  
30      4443 kB: A Services  
31                 4443 kB: com.apical.dreamthemetime (pid 4448)  
32      4130 kB: Background  
33                 4130 kB: com.apical.apicalradio (pid 4518)  
34   
35 Total PSS by category:  
36     56020 kB: Dalvik  
37     30214 kB: Other dev  
38     27716 kB: Native  
39     24504 kB: Cursor  
40     13198 kB: Unknown  
41      7723 kB: Other mmap  
42      6895 kB: .so mmap  
43      1232 kB: .apk mmap  
44       888 kB: .dex mmap  
45        36 kB: .ttf mmap  
46        34 kB: Ashmem  
47         0 kB: .jar mmap  
48   
49 Total PSS: 168460 kB  

 

打印某個程序內存信息,把包名寫上,如:com.android.launcher

 

 

 1 sh-4.2# dumpsys meminfo com.android.launcher  
 2 Applications Memory Usage (kB):  
 3 Uptime: 4497753 Realtime: 4497741  
 4   
 5 ** MEMINFO in pid 2683 [com.android.launcher] **  
 6                          Shared  Private     Heap     Heap     Heap  
 7                    Pss    Dirty    Dirty     Size    Alloc     Free  
 8                 ------   ------   ------   ------   ------   ------  
 9        Native     2144      988     2040     8636     5124     1699  
10        Dalvik     9481     8292     8644    13639    13335      304  
11        Cursor        0        0        0                             
12        Ashmem        2        4        0                             
13     Other dev        4       20        0                             
14      .so mmap      922     1892      292                             
15     .jar mmap        0        0        0                             
16     .apk mmap       90        0        0                             
17     .ttf mmap        0        0        0                             
18     .dex mmap      300        0        0                             
19    Other mmap     1634       16      112                             
20       Unknown     1830      580     1772                             
21         TOTAL    16407    11792    12860    22275    18459     2003  
22    
23  Objects  
24                Views:      146         ViewRootImpl:        1  
25          AppContexts:      374           Activities:        1  
26               Assets:        4        AssetManagers:        4  
27        Local Binders:       13        Proxy Binders:       23  
28     Death Recipients:        1  
29      OpenSSL Sockets:        0  
30    
31  SQL  
32                 heap:       59          MEMORY_USED:       59  
33   PAGECACHE_OVERFLOW:        1          MALLOC_SIZE:       46  
34    
35  DATABASES  
36       pgsz     dbsz   Lookaside(b)          cache  Dbname  
37          1      179             55         2/11/2  launcher.db  
38    
39  Asset Allocations  
40     zip:/system/app/Launcher2.apk:/resources.arsc: 340K  
41     zip:/system/app/MediaCenter.apk:/resources.arsc: 604K  

 

Android程序內存被分為2部分:native和dalvik,dalvik就是我們平常說的java堆,我們創建的對象是在這里面分配的,而bitmap是直接在native上分配的,對於內存的限制是 native+dalvik 不能超過最大限制。Android程序內存一般限制在16M,當然也有24M的。
從上信息對於分析內存泄露,內存溢出都有極大的作用,從以上信息可以看到該應用程序占用的native和dalvik,當TOTAL 16407 11792 12860 22275 18459 2003超過內存最大限制時會出現OOM錯誤。
dumpsys能做的事還有很多

 

1 dumpsys [options]  
2                meminfo 顯示內存信息  
3                cpuinfo 顯示CPU信息  
4                account 顯示accounts信息  
5                activity 顯示所有的activities的信息  
6                window 顯示鍵盤,窗口和它們的關系  
7                wifi 顯示wifi信息  

 

 

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  進程的名稱

具體信息可以查看源代碼中: 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
 

參考文檔:http://www.cnblogs.com/qianxudetianxia/archive/2012/05/14/2497073.html

轉自:http://blog.csdn.net/deng0zhaotai/article/details/34848929


免責聲明!

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



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