Android App内存泄露测试方法总结

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

前台进程:当前运行的,基本不死 ;

可见进程:界面可以见到,比如被遮挡 ;

服务进程:进程带后台服务的,比如播放器 ;

后台进程:点击home键,但不退出,就是后台进程了,有比较大几率会被杀;

空进程:退出应用程序,还在后台保留这空进程,为的是加快启动速率,最优先。

五、内存抖动

内存抖动是指内存频繁地分配和回收,而频繁的GC会导致卡顿,严重时还会导致OOM(主要原因还是有因为大量小的对象频繁创建,导致内存碎片,从而当需要分配内存时,虽然总体上还是有剩余内存可分配,而由于这些内存不连续,导致无法分配,系统直接就返回OOM了)

六、内存名词VSS、RSS、PSS、USS解释

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

大小规律:

一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

image.png

七、 内存值获取方法

使用命令 adb shell dumpsys meminfo package_name 获取内存信息,如日历的内存信息如下:

image.png

PSS Total:进程各部分内存的消耗,是所有进程PSS相加得到系统占用内存的总和

Native Heap:Native代码分配的内存,虚拟机和Android框架分配内存。关于什么是Native代码,即非Java代码分配的内存

Dalvik Heap:Java对象分配的占据内存

Dalvik Other:类数据结构和索引占据内存

Stack:栈内存

Private Dirty:它基本上是进程内不能被分页到磁盘的内存,也不和其他进程共享,private Dirty内存是最重要的部分,因为只被自己进程使用

Private Clean:是已经映射持久文件使用的内存页(例如正在被执行的代码),因此一段时间不使用的话就可以置换出去

Heap Alloc:是Dalvik堆和本地堆分配使用的大小,它的值比Pss Total和Private Dirty大,因为进程是从Zygote中复制分裂出来的,包含了进程共享的分配部分

Ashmem:不以dalvik-开头的内存区域,匿名共享内存用来提供共享内存通过分配一个多个进程,Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。

Other dev:内部driver占用的内存

.so mmap:C 库代码占用的内存

.jar mmap:Java 文件代码占用的内存

.apk mmap:apk代码占用的内存

.ttf mmap:ttf 文件代码占用的内存

.dex mmap:Dex 文件代码占用的内存

Other mmap:其他文件占用的内存

八、 测试场景选择

内存出现泄漏的前提条件一定是有新的内存分配,所以测试场景会选择有新对象创建的场景,并结合用户的使用场景和频率来确定优先级。测试场景主要有以下三种情况,配合测试次数,然后可以每5次获取一次内存值进行判断,一般测试300次,如果各种内存测试完成并等待5分钟后内存没有释放,则高概率存在内存泄露:

1)新画面打开

由于新的画面打开,就会创建新的Activity和View,并有许多其他对象被创建。

测试方法:

反复进入退出需要测试的目标Activity,如果发现Activities和Views的一直在增长,则内存泄露一定发生(退出时如果手动GC,则Activities和Views的数量应该为0)

2)画面旋转

当屏幕旋转时,Orientation设置发生了改变,当前显示的Activity会被重新创建。

测试方法:进入需要测试的目标Activity,反复横竖屏切换,如果发现Activities数量等其他值一直在增长,则内存泄露一定发生

3)滑动屏幕

滑动屏幕会使屏幕中显示的对象(比如浏览器小说阅读内容)创建。

测试方法:进入需要测试的目标Activity,一直固定某个方向滑动(向左),如果发现内存值一直在增长,则内存泄露一定发生

Case例子,仅供参考:

image.png

测试过程中的值记录模板,仅供参考:

image.png

注意:

1)每个应用的脚本需要获取的信息可以直接涉及好关联应用或进程的数据值,例如测试camera时后台camera服务进程,多媒体进程、相册进程。

2)针对内存泄露的测试,需要开发自动化脚本测试,然后测试过程中获取测试的值存入execl的固定模板,测试完成后根据测试结果数据判断是否有内存泄露

九、 定位内存泄露的原因

如果是真机测试,安装一个debug版本的apk,否则monitor无法显示进程

方法一:使用DDMS(Monitor)检测内存泄露–需要

image.png

步骤2、然后在打开DDMS, 选择Heap标签,然后点击Cause GC按钮,点击Cause GC是手动触发JAVA垃圾回收器,如下图:

image.png

如果我们要测试某个Activity是否发生内存泄露,我们可以反复进入和退出这个Activity, 再手动触发几次垃圾回收,观察上图中 data object这一栏中的 Total Size的大小是保持稳定还是有明显的变大趋势,如果有明显的变大趋势就说明这个Activity存在内存泄露的问题,需要在具体分析。

参考链接:https://zhuanlan.zhihu.com/p/68351554

友情推荐:

Android 开发干货集锦

点个在看,方便您使用时快速查找!

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

[外链图片转存中…(img-CMjWS0Xr-1715722037157)]
[外链图片转存中…(img-oN078PUc-1715722037158)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行app性能测试时,可以通过以下方法来测试内存泄露和内存溢出: 1. 内存泄露测试: - 在测试过程中,持续监测应用程序的内存使用情况。可以使用一些性能测试工具和内存分析工具,如Android Profiler或Xcode Instruments,来跟踪应用程序的内存分配和释放情况。 - 针对特定功能或场景进行长时间的测试,例如反复执行某个功能并观察内存使用情况。如果内存使用持续增加,而没有及时回收或释放,就可能存在内存泄露的问题。 - 在测试过程中,创建大量对象或使用频率高的资源,然后观察内存是否正常释放。如果发现内存没有得到正确释放,就可能存在内存泄露问题。 - 另外,还可以利用一些自动化测试工具,模拟用户长时间使用应用程序的场景,检查内存是否稳定或出现泄露。 2. 内存溢出测试: - 在测试过程中,模拟大量用户请求或输入数据,并持续观察内存使用情况。如果内存迅速增加并超过应用程序的内存限制,就可能存在内存溢出问题。 - 向应用程序注入大量数据,例如大型文件或高分辨率图像,然后观察内存是否能够正常处理和释放这些数据。如果内存快速增加而没有合理释放,就可能存在内存溢出的情况。 - 还可以模拟低内存环境,例如通过在测试设备上同时运行其他内存消耗较高的应用程序,观察应用程序在低内存条件下的表现。如果应用程序在这样的场景下崩溃或无法正常运行,就可能存在内存溢出问题。 在进行内存泄露和内存溢出测试时,重要的是要模拟真实的使用场景,并且进行全面而连续的监测。通过这些测试方法,可以及早发现和解决内存问题,提高应用程序的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值