Android系统查看内存命令

本文详细介绍了Android系统中用于内存监控的命令,包括dumpsysmeminfo、procrank以及free命令的使用,分析了内存占用的关键指标如USS、PSS、RSS等,帮助开发者在排查内存泄漏时进行有效的系统调优。
摘要由CSDN通过智能技术生成

导言
在做系统调优或者排查系统内存泄漏的过程中,我们需要查看系统的内存情况,这里详列一下内存查看的方式,可以横向比较一下各自的不同

查看方式/命令:

dumpsys meminfo 
dumpsys meminfo packagename
procrank
procmem
free / free -m
cat /proc/meminfo
top、ps[-A]
基本概念
USS: 进程独占的内存,不包含使用共享库所在的内存(物理内存)
PSS: USS + 使用的共享库均分到每个使用它的进程中的内存(物理内存)
RSS:PSS + 共享库占用的内存(物理内存)
VSS:进程占用的虚拟内存,很少使用它来分析内存
VSS >= RSS >= PSS >= USS

dumpsys meminfo
dumpsys meminfo命令有两种用法,可以直接使用,也可以后面加进程名使用,如dumpsys meminfo tv.fun.test

130|shell@LCD_42SFMTCCA_B:/ # dumpsys meminfo                                  
Applications Memory Usage (kB):
Uptime: 8248855 Realtime: 8248855
Total PSS by process: //列出所有进程的PSS内存值
    33744 kB: system (pid 3424)
    28585 kB: surfaceflinger (pid 3022)
    24204 kB: com.sharp.launcher3 (pid 4153)
    19026 kB: com.sharp.fxc.mor.tv (pid 4433)
    18384 kB: com.baidu.input_baidutv (pid 3770)
  ...

Total PSS by OOM adjustment://根据oom的种类列出PSS内存值
    75762 kB: Native
               28585 kB: surfaceflinger (pid 3022)
               12649 kB: mediaserver (pid 3041)
             ...
    53982 kB: Persistent
               33744 kB: system (pid 3424)
               15626 kB: com.android.systemui (pid 3605)
                ...
     9855 kB: Persistent Service
                9855 kB: com.android.bluetooth (pid 4246)
    41115 kB: Foreground
               38646 kB: com.sharp.fxc.fxcscreensaver (pid 4925 / activities)
                2469 kB: com.funshion.android.providers.tv (pid 3754)
     7893 kB: Visible
                5014 kB: com.droidlogic.tvinput (pid 3738)
                2879 kB: com.sharp.fxc.upgrade:settings (pid 4360)
    40963 kB: Perceptible
               ...
    16225 kB: A Services
               ...
    13663 kB: Previous
               ...
    84005 kB: B Services
               ...
    60362 kB: Cached
               ...
Total PSS by category:
    97586 kB: Dalvik
    75449 kB: .dex mmap
    53487 kB: Native
    47927 kB: .so mmap
    27484 kB: .oat mmap
    27113 kB: .art mmap
    24300 kB: EGL mtrack
    11208 kB: GL mtrack
     8475 kB: .apk mmap
     7624 kB: Dalvik Other
     6180 kB: Stack
     5600 kB: Unknown
     5020 kB: Other dev
     4608 kB: Other mmap
     1484 kB: .ttf mmap
      268 kB: Ashmem
        8 kB: .jar mmap
        4 kB: Cursor
        0 kB: Gfx dev
        0 kB: Other mtrack

Total RAM: 939320 kB (status normal)
 Free RAM: 495770 kB (60362 cached pss + 335716 cached kernel + 99692 free)
 Used RAM: 528291 kB (343463 used pss + 184828 kernel)
 Lost RAM: -84741 kB
     ZRAM: 72 kB physical used for 0 kB in swap (511996 kB total swap)
   Tuning: 128 (large 192), oom 106496 kB, restore limit 108333 kB (low-ram)
shell@LCD_42SFMTCCA_B:/ # 
序列类型排序解释
1processPSS以进程的PSS从大到小依次排序显示,每行显示一个进程;
2OOM adjPSSNative/System/Persistent/Foreground/Visible/Perceptible/A Services/B Services/Cached,分别显示每类的进程情况
3categoryPSS以Dalvik/Native/.art mmap/.dex map等划分的各类进程的总PSS情况

列出某个进程的详细内存占用信息

shell@LCD_42SFMTCCA_B:/ # dumpsys meminfo tv.fun.test                          
Applications Memory Usage (kB):
Uptime: 8928752 Realtime: 8928752

** MEMINFO in pid 4744 [tv.fun.test] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap      559      516        0        0     2028     1937       90
  Dalvik Heap      406      280        0        0     4684     3540     1144
 Dalvik Other      144      144        0        0                           
        Stack       64       64        0        0                           
    Other dev        4        0        4        0                           
     .so mmap      195       64        0        0                           
    .apk mmap       24        0       24        0                           
    .dex mmap      112        0      108        0                           
    .oat mmap      167        0        0        0                           
    .art mmap      552      312        0        0                           
   Other mmap        5        4        0        0                           
      Unknown       68       68        0        0                           
        TOTAL     2300     1452      136        0     6712     5477     1234
 
 Objects
               Views:        0         ViewRootImpl:        0
         AppContexts:        2           Activities:        0
              Assets:        2        AssetManagers:        2
       Local Binders:        3        Proxy Binders:        9
       Parcel memory:        2         Parcel count:        9
    Death Recipients:        0      OpenSSL Sockets:        0
 
 SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
 
shell@LCD_42SFMTCCA_B:/ #

以很清楚的看到进程占用的内存的详细分布。比如可以看到使用的so占用的PSS内存,进程占用的native堆的大小,还有Dalvik堆的大小。当发生内存泄露时,这个命令可以帮助我们分析具体在哪一部分产生了内存泄露。
:dumpsys meminfo 实现原理参考Android Dumpsys 命令&实例&原理
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java

public static void setSystemProcess() {
	 ServiceManager.addService(Context.ACTIVITY_SERVICE, m, true);
     ServiceManager.addService(ProcessStats.SERVICE_NAME, m.mProcessStats);
     ServiceManager.addService("meminfo", new MemBinder(m));
     ServiceManager.addService("gfxinfo", new GraphicsBinder(m));
     ServiceManager.addService("dbinfo", new DbBinder(m));
   	ServiceManager.addService("cpuinfo", new CpuBinder(m));
     ServiceManager.addService("permission", new PermissionController(m));
}

procrank
procrank命令也可以输出所有进程的内存占用信息,并按照PSS大小排序。但是相比dumpsys meminfo,procrank的优势在于,它可以详细的列出每个进程的USS/RSS/PSS/VSS信息。其中最有价值的就是USS信息,前面说过,它表示进程独占的物理内存,通过观察它的变化,可以发现进程是否有内存泄露。

1|shell@LCD_42SFMTCCA_B:/ # procrank                                           
  PID       Vss      Rss      Pss      Uss  cmdline
 3424   903556K   70368K   33549K   29660K  system_server
	...
 3754   812072K   26684K    2519K    1788K  com.funshion.android.providers.tv
 3039    13848K    5388K    2448K    1748K  /system/bin/drmserver
 4905   815172K   25216K    2393K    1528K  com.sharp.fxc.adservice:background
 4615   812080K   26588K    2261K    1552K  com.funshion
 3049    29428K    5960K    2130K    1440K  /system/bin/imageserver
 4557   799192K   24648K    2043K    1424K  com.sharp.fxc.fxctopactivity
    1      976K     660K     531K     456K  /init
 5131      828K     480K     476K     476K  /system/bin/mdnsd
 3019     2376K    1092K     383K     256K  /system/bin/lmkd
 9882     1068K     572K     294K     288K  procrank
 4136     1104K     616K     257K     244K  /system/bin/dhcpcd
 3042     1152K     568K     217K     208K  /system/bin/installd
 3020     1208K     512K     194K     184K  /system/bin/servicemanager
 2526      672K     264K     188K     116K  /sbin/ueventd
 3056     1560K     212K     184K     184K  /sbin/adbd
 3018     1576K     188K     184K     184K  /sbin/healthd
 4152      540K     268K     129K      84K  sh
 4140      536K     260K     121K      76K  sh
 4128      536K     260K     121K      76K  sh
 3036      536K     260K     121K      76K  /system/bin/sh
                           ------   ------  ------
                          377743K  304912K  TOTAL

RAM: 939320K total, 99404K free, 19160K buffers, 479084K cached, 5632K shmem, 42292K slab
shell@LCD_42SFMTCCA_B:/ # 

procmem pid
procrank 给出了系统整体的内存占用情况,procmem 是针对某个进程查看内存情况。类似于cat /proc/pid/maps

1|shell@LCD_42SFMTCCA_B:/ # procmem 4744                                       
    Vss      Rss      Pss      Uss     ShCl     ShDi     PrCl     PrDi  Name
-------  -------  -------  -------  -------  -------  -------  -------  
  2052K     116K     116K     116K       0K       0K     116K       0K  /dev/ashmem/dalvik-main
194556K       0K       0K       0K       0K       0K       0K       0K  /dev/ashmem/dalvik-main
196608K       0K       0K       0K       0K       0K       0K       0K  /dev/ashmem/dalvik-main
  9608K    9500K     608K     360K    9140K       0K     360K       0K  /data/dalvik-cache/arm/system@framework@boot.art
 28268K    2848K     162K      12K    2836K       0K      12K       0K  /system/framework/arm/boot.oat
 23676K    1956K      79K      16K    1940K       0K      16K       0K  /system/framework/arm/boot.oat
     4K       0K       0K       0K       0K       0K       0K       0K  /system/framework/arm/boot.oat
  5020K    5020K     286K     160K    4860K       0K     160K       0K  /dev/ashmem/dalvik-zygote
     4K       4K       4K       4K       0K       0K       4K       0K  /dev/ashmem/dalvik-non
    52K      52K      52K      52K       0K       0K      52K       0K  /dev/ashmem/dalvik-non
 55344K       0K       0K       0K       0K       0K       0K       0K  /dev/ashmem/dalvik-non
  5116K       0K       0K       0K       0K       0K       0K       0K  /dev/ashmem/dalvik-non
    12K       8K       0K       0K       8K       0K       0K       0K  /system/bin/app_process32
     4K       4K       0K       0K       4K       0K       0K       0K  /system/bin/app_process32
    56K      44K       1K       0K      44K       0K       0K       0K  /system/bin/linker
     4K       4K       0K       0K       4K       0K       0K       0K  /system/bin/linker
     4K       4K       4K       4K       0K       0K       4K       0K  /system/bin/linker
  8188K      20K      20K      20K       0K       0K      20K       0K  [stack]
     4K       0K       0K       0K       0K       0K       0K       0K  [vectors]
-------  -------  -------  -------  -------  -------  -------  -------  
798860K   27320K    2592K    1772K   25508K      40K    2912K       0K  TOTAL

free /free -m
free命令可以输出系统整体的内存占用情况,free的输出如下:

shell@LCD_42SFMTCCA_B:/ # free                                                 
             total         used         free       shared      buffers
Mem:        939320       835288       104032            0        19860
-/+ buffers:             815428       123892
Swap:       511996            0       511996
shell@LCD_42SFMTCCA_B:/ # free -m                                              
             total         used         free       shared      buffers
Mem:           917          819(used1)   97(free1)  0           19
-/+ buffers:                800 (used2) 117(free2)
Swap:          499      

第二行和第三行都是系统的内存信息,但是略有区别:

  1. 第二行是从系统的角度看,当前使用的物理内存和空闲内存,还有shared和buffer的内存。这时total = used + free + shared + buffers
  2. 第三行是从应用的角度看,当前使用的物理内存和空闲内存。因为对应用来说,shared和buffer的内存,都是属于可用内存

cat /proc/meminfo
cat /proc/meminfo命令相比于free,可以更详细的列出系统当前的内存分部状况。其输出如下:


shell@LCD_42SFMTCCA_B:/ # cat /proc/meminfo
MemTotal:         939320 kB
MemFree:          103088 kB
MemAvailable:     518244 kB
Buffers:           20804 kB
Cached:           479120 kB
SwapCached:            0 kB
Active:           256840 kB
Inactive:         445056 kB
Active(anon):     145464 kB
Inactive(anon):    62868 kB
Active(file):     111376 kB
Inactive(file):   382188 kB
Unevictable:         728 kB
Mlocked:               0 kB
SwapTotal:        511996 kB
SwapFree:         511996 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        202700 kB
Mapped:           166100 kB
Shmem:              5632 kB
Slab:              42420 kB
SReclaimable:      16588 kB
SUnreclaim:        25832 kB
KernelStack:       15216 kB
PageTables:        16560 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      981656 kB
Committed_AS:   21394736 kB
VmallocTotal:    2097088 kB
VmallocUsed:      104360 kB
VmallocChunk:    1921892 kB
TotalCMA:         147456 kB
DriverCMA:          9744 kB
FreeCMA:              40 kB
shell@LCD_42SFMTCCA_B:/ # 

系统此时真正的可用内存是MemFree + Buffers + Cached

top
同PS ,实时的查看系统进程内存占用情况,CPU占用率等

shell@LCD_42SFMTCCA_B:/ # top
User 1%, System 3%, IOW 0%, IRQ 0%
User 7 + Nice 0 + Sys 22 + Idle 561 + IOW 0 + IRQ 0 + SIRQ 4 = 594
  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
10403  0   2% R     1   2492K    968K  fg root     top
 3424  1   1% S    80 903600K  67120K  fg system   system_server
 3025  1   0% S     6  52796K  10772K  fg root     /system/bin/tvserver
   22  1   0% S     1      0K      0K  fg root     suspend
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取内存大小,可以获取总内存,剩余内存,以及已经使用的内存 文件目录: CheckMemory ...........\.idea ...........\.....\.name ...........\.....\androidDexCompiler.xml ...........\.....\compiler.xml ...........\.....\copyright ...........\.....\.........\profiles_settings.xml ...........\.....\encodings.xml ...........\.....\misc.xml ...........\.....\modules.xml ...........\.....\scopes ...........\.....\......\scope_settings.xml ...........\.....\uiDesigner.xml ...........\.....\vcs.xml ...........\.....\workspace.xml ...........\AndroidManifest.xml ...........\ant.properties ...........\assets ...........\bin ...........\build.xml ...........\CheckMemory.iml ...........\gen ...........\...\me ...........\...\..\normalhh ...........\...\..\........\checkmemory ...........\...\..\........\...........\BuildConfig.java ...........\...\..\........\...........\Manifest.java ...........\...\..\........\...........\R.java ...........\libs ...........\local.properties ...........\out ...........\...\production ...........\...\..........\CheckMemory ...........\...\..........\...........\CheckMemory.apk ...........\...\..........\...........\CheckMemory.unaligned.apk ...........\...\..........\...........\me ...........\...\..........\...........\..\normalhh ...........\...\..........\...........\..\........\checkmemory ...........\...\..........\...........\..\........\...........\BuildConfig.class ...........\...\..........\...........\..\........\...........\MyActivity.class ...........\...\..........\...........\..\........\...........\R$attr.class ...........\...\..........\...........\..\........\...........\R$drawable.class ...........\...\..........\...........\..\........\...........\R$id.class ...........\...\..........\...........\..\........\...........\R$layout.class ...........\...\..........\...........\..\........\...........\R$string.class ...........\...\..........\...........\..\........\...........\R.class ...........\proguard-project.txt ...........\project.properties ...........\res ...........\...\drawable-hdpi ...........\...\.............\ic_launcher.png ...........\...\drawable-ldpi ...........\...\.............\ic_launcher.png ...........\...\drawable-mdpi ...........\...\.............\ic_launcher.png ...........\...\drawable-xhdpi ...........\...\..............\ic_launcher.png ...........\...\layout ...........\...\......\main.xml ...........\...\values ...........\...\......\strings.xml ...........\src ...........\...\me ...........\...\..\normalhh ...........\...\..\........\checkmemory ...........\...\..\........\...........\MyActivity.java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值