摘要:本篇文章主要讲述软件测试技术之Android测试-Dumpsys meminfo工具,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
本篇文章主要讲述软件测试技术之Android测试-Dumpsys meminfo工具,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
初识Dumpsys meminfo
接下来我们从一张图片来了解”Dumpsys meminfo”这个工具,大家看到这个图一定很懵逼,小编刚开始看到的时候也是这个感觉,不过小编已经给大家准备了”福利”
Pss TOTAL:
内存所实际占用的值。
Dalvik Heap Size: 从RuntimetotalMemory()获得,DalvikHeap总共的内存大小。 Dalvik Heap Alloc: 从RuntimetotalMemory()获得,DalvikHeap总共的内存大小。 Dalvik Heap Free: 从RuntimefreeMemory()获得,DalvikHeap剩余的内存大小。 Dalvik Heap Size: 约等于Dalvik HeapAlloc+ Dalvik HeapFree。 .so mmap C 库代码占用的内存。 .jar mmap: Java 文件代码占用的内存。 .apk mmap: apk代码占用的内存。 .ttf mmap: ttf 文件代码占用的内存。 .dex mmap: Dex 文件代码占用的内存。 Other mmap: 其他文件占用的内存。 Ashmem: /dev/ashmem,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。 Other dev: /dev/,内部driver占用的在 “Otherdev”。 |
Dumpsys meminfo名词了解
私有(Clean and Dirty)内存:
进程独占的内存。也就是应用进程销毁时系统可以直接回收的内存容量。通常来说,“private dirty”内存是其最重要的部分,因为只被自己的进程使用。它只在内存中存储,因此不能做分页存储到外存(Android不支持swap)。所有分配的Dalvik堆和本地堆都是“private dirty”内存;Dalvik堆和本地堆中和Zygote进程共享的部分是共享dirty内存。
实际使用内存 (PSS):
这是另一种应用内存使用的计算方式,把跨进程的共享页也计算在内。任何独占的内存页直接计算它的PSS值,而和其它进程共享的页则按照共享的比例计算PSS值。例如,在两个进程间共享的页,计算进每个进程PPS的值是它的一半大小。PSS计算方式的一个好处是:把所有进程的PSS值加起来就可以确定所有进程总共占用的内存。这意味着用PSS来计算进程的实际内存使用、进程间对比内存使用和总共剩余内存大小是很好的方式。
Ps:通常来说,只需关心Pss Total列和Private Dirty列就可以了。
.so mmap和.dex mmap:
mmap映射的.so(本地) 和.dex(Dalvik)代码使用的内存。
Pss Total 包含了跨应用共享的平台代码;
Private Clean是应用独享的代码。
Ps:通常来说,实际映射的内存大小要大一点——这里显示的内存大小是执行了当前操作后应用使用的内存大小。然而,.so mmap 的private dirty比较大,这是由于在加载到最终地址时已经为本地代码分配好了内存空间。
Unknown:
无法归类到其它项的内存页。目前,这主要包含大部分的本地分配,就是那些在工具收集数据时由于地址空间布局随机化(Address Space Layout Randomization ,ASLR)不能被计算在内的部分。和Dalvik堆一样, Unknown中的Pss Total把和Zygote共享的部分计算在内,Unknown中的Private Dirty只计算应用独自使用的内存。
ViewRootImpl:
进程中活动的根视图的数量。每个根视图与一个窗口关联,因此可以帮助确定涉及对话框和窗口的内存泄露。
AppContexts和Activities:
当前驻留在进程中的Context和Activity对象的数量。可以很快的确认常见的由于静态引用而不能被垃圾回收的泄露的 Activity对象。这些对象通常有很多其它相关联的分配,因此这是追查大的内存泄露的很好办法。
注意:View 和 Drawable 对象也持有所在Activity的引用,因此,持有View 或 Drawable 对象也可能会导致应用Activity泄露。
小编特别奉献
Python+UIAutomator获取内存信息
from uiautomator import device as d import os import time d.screen.on() d(text=u""搜狗贷款大全"").click() // 通过text打开应用程序 package_name =""com.sogou.loanmart"" phone_sn =""860BDMR226D4"" info = [] def meminfo(phone_sn, apk_package_name): try: meminfo = os.popen(""adb -s {0} shell dumpsys meminfo {1} "".format (phone_sn,apk_package_name)).read() pss = meminfo.split() print pss except IndexError: pss ="""" return pss #获取内存值,并写入到文件 with open(""mem.txt"",'w+')as m: for i in range(10): pss_value = meminfo(phone_sn,package_name) print type(pss_value) time.sleep(2) m.write(pss_value + ""\n"") cmd='adb shell am force-stop com.sogou.loanmart' os.system(cmd) |
代码还需优化,请谨慎~
本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号