如何解释Android上/ proc / meminfo的值?

时间:2013-09-30 22:01:50

标签: android

我正在编写一款需要测量当前空闲/已用RAM的Android应用。

搜索此站点显示多个具有相似主题的主题通常建议采用两种方法:


方法1:

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
totalMegs = mi.totalMem / 1048576L;  //available since API 16 only

方法2:解析/ proc / meminfo。

我尝试了两种方法,但似乎工作正常。我从两种方法中得到相同的值。 我的问题是,当我转到屏幕底部的Settings -> Apps -> Running时,有关自由/使用过的RAM的信息,这与我上面提到的方法不同。 我怀疑Google确实将缓存的应用程序报告为可用内存,因为当我杀死一些缓存的进程时,Google报告的RAM使用率几乎没有变化,但我的应用程序的数量接近我刚刚杀死的运行进程的大小。

示例:

方法1输出:

meminfo: avail: 660, total: 821, used: 161

方法2输出:

root@android:/proc # cat meminfo
MemTotal:         840868 kB
MemFree:          548080 kB
Buffers:               0 kB
Cached:           128300 kB
SwapCached:            0 kB
Active:           192052 kB
Inactive:          79816 kB
Active(anon):     157792 kB
Inactive(anon):        0 kB
Active(file):      34260 kB
Inactive(file):    79816 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        143580 kB
Mapped:            67584 kB
Slab:               6736 kB
SReclaimable:       2104 kB
SUnreclaim:         4632 kB
PageTables:         4008 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      420432 kB
Committed_AS:    1606616 kB
VmallocTotal:     122880 kB
VmallocUsed:       20588 kB
VmallocChunk:      77828 kB

MemFree + Cached = 660MB


Android reported RAM usage: 679MB Free, 142MB used.

如何获得与Android报告相同的数字?

我认为我必须从/proc/meminfo获取它,因为官方API似乎不存在。

2 个答案:

答案 0 :(得分:4)

MemTotal - 物理RAM的总量,以千字节为单位。

MemFree - 系统未使用的物理RAM量(以千字节为单位)。

缓冲区 - 用于文件缓冲区的物理RAM量,以千字节为单位。

缓存 - 用作缓存的物理RAM量,以千字节为单位。

SwapCached - 用作缓存内存的交换量,以千字节为单位。

活动 - 正在使用的缓冲区或页面缓存内存总量(以KB为单位)。这是最近使用的内存,通常不会被回收用于其他目的。

非活动 - 缓冲区或页面缓存内存的总量,以千字节为单位,是免费且可用的。这是最近没有使用的内存,可以回收用于其他目的。

HighTotal和HighFree - 未直接映射到内核空间的内存总量和可用内存量(以KB为单位)。 HighTotal值可能因所使用的内核类型而异。

LowTotal和LowFree - 直接映射到内核空间的内存总量和空闲量,以千字节为单位。 LowTotal值可能因所使用的内核类型而异。

SwapTotal - 可用的交换总量,以千字节为单位。

SwapFree - 免费交换的总量,以千字节为单位。

Dirty - 等待写回磁盘的内存总量(以KB为单位)。回写 - 主动写回磁盘的内存总量(以千字节为单位)。

映射 - 使用mmap命令用于映射设备,文件或库的内存总量(以KB为单位)。

Slab - 内核用于缓存数据结构以供自己使用的内存总量(以KB为单位)。

Committed_AS - 估计完成工作负载的内存总量(以KB为单位)。此值表示最坏情况的场景值,还包括交换内存。 PageTables - 专用于最低页表级别的内存总量,以千字节为单位。

VMallocTotal - 分配的虚拟地址空间总量的内存总量,以千字节为单位。

VMallocUsed - 使用的虚拟地址空间的总内存量(以千字节为单位)。

VMallocChunk - 可用虚拟地址空间中最大的连续内存块(以KB为单位)。

HugePages_Total - 系统的大页面总数。该数字是通过将Hugepagesize除以为/ proc / sys / vm / hugetlb_pool中指定的largepages预留的兆字节得出的。此统计信息仅出现在x86,Itanium和AMD64体系结构中。

HugePages_Free - 系统可用的大页面总数。此统计信息仅出现在x86,Itanium和AMD64体系结构中。

Hugepagesize - 每个大页面单位的大小(以千字节为单位)。默认情况下,32位体系结构的单处理器内核上的值为4096 KB。对于SMP,hugemem内核和AMD64,默认值为2048 KB。对于Itanium体系结构,默认值为262144 KB。此统计信息仅出现在x86,Itanium和AMD64体系结构中。

答案 1 :(得分:0)

高级Settings -> Apps -> Running有两个分区:usedfree

但是,当您仔细观察时,Running仅包含used的一部分;

同样,当您点击按钮show cached processes(在左上方)时,您会看到(在底部)他们只占据free的一部分;另一部分应该是真正的空闲内存(即没有任何缓存的应​​用程序)。

问题是它没有显示任何数字。并从"部分"真正的自由记忆,似乎与你proc/meminfo所得到的有点不同。