Android 查看內存命令總結

內存相關概念解析

一個進程佔用了多少內存,主要有下述四種說法:

  1. VSS(Virtual Set Size),虛擬內存。RSS + 未分配實際物理內存

    單個進程可訪問的全部虛擬內存地址空間,其大小包括未實際申請的物理內存。

  2. RSS(Resident Set Size),物理內存。USS + 包含共享庫

    單個進程實際佔用的內存大小,RSS不太準確的地方在於它包括該進程所使用共享庫全部內存大小。對於一個共享庫,可能被多個進程使用,實際該共享庫只會被裝入內存一次。

  3. PSS(Proportional Set Size),物理內存。USS + 按比例包含共享庫

    PSS相對於RSS計算共享庫內存大小是按比例的。N個進程共享,該庫對PSS大小的貢獻只有1/N。

  4. USS(Unique Set Size),物理內存。進程獨佔的內存

    單個進程私有的內存大小,即該進程獨佔的內存部分。USS表示運行一個特定進程的真實內存增量大小,如果進程終止,USS就是實際被返還給系統的內存大小。

dumpsys meminfo

查看指定進程的內存信息:dumpsys meminfo [pid]

Applications Memory Usage (in Kilobytes):
Uptime: 2455033 Realtime: 2455033
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap      212      184       28    36524        0        0        0
  Dalvik Heap        0        0        0        0        0        0        0
        Stack        4        0        4      740
    Other dev        9        0        0        0
     .so mmap    36266       16    35460     5740
   Other mmap       12        0        8       52
      Unknown       64       36       28     6708
        TOTAL    86331      236    35528    49764        0        0        0

 App Summary
                       Pss(KB)
                        ------
           Java Heap:        0
         Native Heap:      184
                Code:    35476
               Stack:        0
            Graphics:        0
       Private Other:      104
              System:    50567

               TOTAL:    86331       TOTAL SWAP PSS:    49764

Android heap上的內存分爲兩塊:native和dalvik。dalvik就是我們平常說的java堆,Java對象分配佔據的內存;Native代碼分配的內存,虛擬機和Android框架分配內存。

procrank

獲取所有進程的內存使用的排行榜,排行是以Pss的大小而排序。procrank命令比dumpsys meminfo命令,能輸出更詳細的VSS/RSS/PSS/USS內存指標。

  PID       Vss      Rss      Pss      Uss     Swap    PSwap    USwap    ZSwap  cmdline
 2572  4757048K  280016K  156987K  147300K    8916K     145K       0K      37K  com.bbk.launcher2
 2548  4276448K  293992K  153739K  140888K    8852K     151K       8K      39K  com.android.systemui
 1037  4887848K  272952K  138643K  128120K   17688K    9001K    8852K    2328K  system_server
 3492  1321548K  132312K   51964K   46528K    7004K     476K       0K     123K  com.vivo.globalsearch
 ......
 RAM: 7801436K total, 3109936K free, 9560K buffers, 2247508K cached, 3468K shmem, 836080K slab

USS是進程獨自佔用的物理內存(不包含共享庫佔用的內存),它是一個非常非常有用的數字, 揭示了運行一個特定進程的真實的內存增量大小。如果進程被終止, USS 就是實際被返還給系統的內存大小。
USS 是針對某個進程開始有可疑內存泄露的情況,進行檢測的最佳數字。懷疑某個程序有內存泄露可以查看這個值是否一直有增加。

cat /proc/meminfo

查看系統的詳盡內存信息,包含內核情況

MemTotal:        7801436 kB		//總內存
MemFree:         3104012 kB		//空閒內存
MemAvailable:    5242416 kB		
Buffers:            9560 kB		//給文件的緩衝大小
Cached:          2249552 kB
SwapCached:         8640 kB
Active:           792860 kB
Inactive:        2345844 kB
Active(anon):     419236 kB
Inactive(anon):   466352 kB
Active(file):     373624 kB
Inactive(file):  1879492 kB
Unevictable:        3260 kB
Mlocked:            3260 kB
SwapTotal:       2097148 kB
SwapFree:        1808416 kB
Dirty:                64 kB		//等待被寫回到磁盤的大小
Writeback:             0 kB
AnonPages:        878096 kB
Mapped:           851592 kB
Shmem:              3468 kB
Slab:             836120 kB
SReclaimable:     121448 kB
SUnreclaim:       714672 kB
KernelStack:       48836 kB
PageTables:        71760 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5997864 kB
Committed_AS:   108413340 kB
VmallocTotal:   263061440 kB	//虛擬內存大小
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:         299008 kB
CmaFree:          199368 kB
RSCISF:           261120 kB
RSCIBF:           110560 kB
NR_KMALLOC:        19840 kB
NR_VMALLOC:        80372 kB
NR_DMA_NOR:            0 kB
NR_DMA_CMA:        95548 kB
NR_ION:           161148 kB
free_ion:          10092 kB
free_ion_pool:     10092 kB
free_ion_heap:         0 kB
NR_GPU:           136452 kB
free_gpu:          21896 kB
o0a1r0:              120 kB
o1a1r0:            21776 kB
o4a0r256:              0 kB
o8a0r32:               0 kB
zram_size:         74708 kB
pcppages:           3788 kB
ALL_MEM:         7778432 kB

free

查看可用內存,缺省單位KB。該命令比較簡單、輕量,專注於查看剩餘內存情況。數據來源於/proc/meminfo。

                total        used        free      shared     buffers
Mem:       7988670464  4812099584  3176570880     3551232     9789440
-/+ buffers/cache:     4802310144  3186360320
Swap:      2147479552   295645184  1851834368

vmstat

不僅可以查看內存情況,還可以查看進程運行隊列、系統切換、CPU時間佔比等情況,另外該指令還是週期性地動態輸出。

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 3  0 1243544 400116 12276 5343880   9   19    41    53    1  465 12 12 76  0

參數列總共15個參數,分爲4大類:

  • procs(進程)
    • r: Running隊列中進程數量
    • b: IO wait的進程數量
  • memory(內存)
    • swpd: 虛擬內存使用大小
    • free: 空閒內存大小
    • buff:用作buffer的內存大小
    • cache: 用作cache的內存大小
  • IO:
    • bi: Blocks received from a block device (blocks/s).
    • bo: Blocks sent to a block device (blocks/s).
  • system(系統)
    • in: 每秒的中斷次數(包括時鐘中斷)
    • cs: 每秒上下文切換的次數
  • cpu(處理器)
    • us: user time
    • ni: nice time
    • sy: system time
    • id: idle time
    • wa: iowait time
    • ir: interrupt time

參考:
http://gityuan.com/2016/01/02/memory-analysis-command/
https://www.cnblogs.com/arnoldlu/p/9375377.html

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