Android 查看内存命令总结

/ Android / 没有评论 / 2384浏览

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
1234567891011121314151617181920212223242526

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大类:

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