在Dumpsys meminfo中出现的“Lost RAM”背后的概念是什么?

时间:2014-02-19 12:54:59

标签: android android-4.4-kitkat

正如我在上面提到的那样,{{1>}中会出现 Lost RAM

  1. Dumpsys meminfo中出现的“Lost RAM”背后的概念是什么?
  2. Kitkat的意义何在?它如何被回收和使用?
  3. 示例dumpsys显示“Lost RAM”。

    Dumpsys meminfo

1 个答案:

答案 0 :(得分:3)

在我的系统上,它们主要由ION(取代pmem)引起。如果您的内核启用了离子调试,则可以使用此脚本计算您的ION使用情况:

adb shell cat /d/ion/heaps/system|perl -ne 'chomp; if (m/pages in.*pool = (\d+) total/) {$x += $1;} if (m/^\s+total\s+(\d+)$/) {$y += $1} END {printf "use: %d kb, cache: %d kb; total: %d kb", $y/1024, $x/1024, ($x + $y)/1024}'

实际上,内核不会跟踪由驱动程序完成和跟踪的任何内核页面分配,因此会计算丢失的ram。

在我停止系统服务器之后,我使用另一个.awk脚本来计算丢失的ram(dumpsys meminfo将需要meminfo服务,因此将不再工作),并且丢失的ram非常接近ION调试输出:< / p>

#!/usr/bin/awk

BEGIN {
    types["MemTotal"] = 1;
    types["Pss"] = 1;
    types["MemFree"] = 1;
    types["Cached"] = 1;
    types["Buffers"] = 1;
    types["Shmem"] = 1;
    types["Slab"] = 1;
}


## start code-generator "^\\s *#"
#echo
# for x in Pss MemTotal MemFree Cached Buffers Shmem Slab; do
#     cat << EOF
#/$x: / {
#     hash["$x"] += \$2;
# next
#}
#
#EOF
# done
## end code-generator
## start generated code

/Pss: / {
    hash["Pss"] += $2;
    next
 }

 /MemTotal: / {
     hash["MemTotal"] += $2;
     next
 }

 /MemFree: / {
     hash["MemFree"] += $2;
     next
 }

 /Cached: / {
     hash["Cached"] += $2;
     next
 }

 /Buffers: / {
     hash["Buffers"] += $2;
     next
 }

 /Shmem: / {
     hash["Shmem"] += $2;
     next
 }

 /Slab: / {
     hash["Slab"] += $2;
     next
 }


## end generated code

END {
    lost =  0;
    for (type in types) {
        if (type == "MemTotal") {
            lost += hash[type];
        } else {
            lost -= hash[type];
        }
    }
    print "lost: " lost " kB\n";
}

我用adb shell sh -c 'echo 3 > /proc/sys/vm/drop_caches'强制内核内存缩小后再次检查,结果仍然非常接近。