android 查看内存使用情况

源码基于:Android  R

1. cat /proc/meminfo

    MemTotal: 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)

    MemFree: LowFree与HighFree的总和

    Buffers: 用来给块设备做的缓冲大小(只记录文件系统的metadata以及 tracking in-flight pages,就是说 buffers是用来存储,目录里面有什么内容,权限等等。)

    Cached: 用来给文件做缓冲大小(直接用来记忆我们打开的文件). 它不包括SwapCached

    SwapCached: 已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。

    Active: 最近经常被使用的内存,除非非常必要否则不会被移作他用.

    Inactive: 最近不经常被使用的内存,非常用可能被用于其他途径.

    HighTotal:
    HighFree: 高位内存是指所有在860MB以上的内存空间,该区域主要用于用户空间的程序或者是缓存页面。内核必须使用不同的手法使用该段内存,因此它比低位内存要慢一些。

    LowTotal:
    LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。
                   Among many other things, it is where everything from the Slab is
                   allocated.  Bad things happen when you're out of lowmem.

    SwapTotal: 交换空间的总和

    SwapFree: 从RAM中被替换出暂时存在磁盘上的空间大小

    Dirty: 等待被写回到磁盘的内存大小。

    Writeback: 正在被写回到磁盘的内存大小。

    Mapped: 影射文件的大小。

    Slab: 内核数据结构缓存

    VmallocTotal: vmalloc内存大小

    VmallocUsed: 已经被使用的虚拟内存大小。

    VmallocChunk: largest contigious block of vmalloc area which is free

    CommitLimit:
    Committed_AS:

详细信息可以查看:Linux 内核参数:meminfo

2. dumpsys meminfo

详细查看:dumpsys meminfo 详解

3. procrank

root@h15:/ # procrank                                                          
  PID       Vss      Rss      Pss      Uss  cmdline
 4034   744312K   80076K   63779K   61188K  com.qiyi.video
 3887   691700K   69676K   54293K   51784K  com.android.systemui
 3749   709572K   36112K   20045K   17728K  system_server
 2586    55280K   15424K   10098K    8804K  /system/bin/tvserver
 2594    68848K   14268K    8235K    6124K  /system/bin/mediaserver
 4151   665424K   20184K    7157K    6016K  android.process.acore
...
...
...
 2599     3512K     452K     180K     168K  /system/bin/sdcard
 2595     1000K     444K     165K     152K  /system/bin/installd
 2608     1500K     176K     160K     160K  /sbin/adbd
 2580     1428K     148K     136K     136K  /sbin/healthd
 2582     1008K     348K     118K     108K  /system/bin/servicemanager
 2588      364K      96K      80K      80K  /system/bin/dig
                           ------   ------  ------
                          236736K  207864K  TOTAL

RAM: 753344K total, 260444K free, 6788K buffers, 187252K cached, 348K shmem, 11480K slab 

Android procrank  (/system/xbin/procrank) 工具,能够列出进程所占用的内存使用情况。顺序为从高到低。
每个进程占用内存大小以 VSS,  RSS , PSS, USS 的形式列出。
为了简化描述,内存占用以页为单位表述,而不是字节。 通常每页为 4096 字节。

VSS ( 等同于 ps 命令列出的 VSZ) 是单个进程全部可访问的地址空间。
其大小包括可能还尚未在内存中驻留的部分。比如地址空间已经被 malloc 分配,但是还没有实际写入。
对于确定单个进程实际内存使用大小, VSS 用处不大。

RSS  是单个进程实际占用的内存大小。
RSS 易被误导的原因在于, 它包括了该进程所使用的所有共享库的全部内存大小。对于单个共享库, 尽管无论多少个进程使用,
实际该共享库只会被装入内存一次。
对于单个进程的内存使用大小, RSS  不是一个精确的描述。

PSS 不同于RSS,它只是按比例包含其所使用的共享库大小。
例如, 三个进程使用同一个占用 30 内存页的共享库。 对于三个进程中的任何一个,PSS 将只包括 10 个内存页。
PSS 是一个非常有用的数字,因为系统中全部进程以整体的方式被统计, 对于系统中的整体内存使用是一个很好的描述。
如果一个进程被终止, 其PSS 中所使用的共享库大小将会重新按比例分配给剩下的仍在运行并且仍在使用该共享库的进程。
此种计算方式有轻微的误差,因为当某个进程中止的时候, PSS 没有精确的表示被返还给整个系统的内存大小。

USS 是单个进程的全部私有内存大小。亦即全部被该进程独占的内存大小。
USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。
如果进程被终止, USS 就是实际被返还给系统的内存大小。
USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。

4. free 命令

# free -k && cat /proc/meminfo
                total        used        free      shared     buffers
Mem:          3746320     1332348     2413972       73544        8360
-/+ buffers/cache:        1323988     2422332
Swap:         1048572           0     1048572

MemTotal:        3746320 kB
MemFree:         2414212 kB
MemAvailable:    2942420 kB
Buffers:            8360 kB
Cached:           537244 kB
SwapCached:            0 kB
Active:            81092 kB
Inactive:         820852 kB
Active(anon):        432 kB
Inactive(anon):   426576 kB
Active(file):      80660 kB
Inactive(file):   394276 kB
Active(purg):          0 kB
Inactive(purg):        0 kB
Pined(purg):           0 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB
...
Shmem:             73544 kB
KReclaimable:     106700 kB
Slab:             131380 kB
SReclaimable:      46604 kB
SUnreclaim:        84776 kB
KernelStack:       16736 kB

free 命令统计的是 /proc/meminfo 中的信息:

 

先来看第一行:

                total        used        free      shared     buffers
Mem:          3746320     1332348     2413972       73544        8360
  • total:系统可用的总内存;
  • free:系统剩余的可用内存,等于 /proc/meminfo 中的 MemFree;(上面数据稍微有点差异算正常)
  • used:total  - free;
  • shared:共享内存,等于 /proc/meminfo 中的Shmem;
  • buffers:块缓存,等于 /proc/meminfo 中的 Buffers;

再来看第二行:

                total        used        free      shared     buffers
Mem:          3746320     1332348     2413972       73544        8360
-/+ buffers/cache:        1323988     2422332

统计的是 buffers/cache 数据:

  • used:等于第一行的 used - buffers;
  • free:等于第一行的 free + buffers;

再来看第三行:

                total        used        free      shared     buffers
Mem:          3746320     1332348     2413972       73544        8360
-/+ buffers/cache:        1323988     2422332
Swap:         1048572           0     1048572

第三行统计的是交换区的数据:

  • total:等于 /proc/meminfo 的SwapTotal;
  • free:等于 /proc/meminfo 的SwapFree;
  • used:total - free;

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值