性能检测自动化(含内存泄露检测)

一、平台侧实现方案
        1、UI case重复执行N次:进入页面,sleep 5s,记录start_time,sleep 30s,记录end_time,性能采集工具全程采集性能数据
        2、根据采集到的性能数据,按照N次卡点性能数据:去掉最大的10%、最小的10%,求取平均值,作为单次性能数据结果f(n)


二、内存泄露

        1、安卓端实现:内存泄露检测分为Java内存泄露检测、native内存泄露检测,Java内存泄露输出位标准hprof文件(一种二进制文件),native泄露输出包含泄露的大小和泄露的堆栈。用例执行后直接通过adb上传dump到的Java hprof至自动化结果中,而native泄露(start的时候替换掉所有的动态内存分配函数-malloc和new;记录malloc和new返回的指针、并存在数据集里,然后free delete的时候,把数据集匹配到的指针删除;stop的时候数据集中剩下的就是疑似泄漏点了)则直接上报至监控平台  

        2、ios端实现:开始记录内存---运行业务case----结束内存记录---堆栈内存地址偏移量埋点上报---存到kafka中---监控平台消费kafka消息---根据版本号符号化后的消息(翻译消息的内存地址,得到代码堆栈)----存到数据库中,查询数据库展示于前端页面

        
        3、平台侧内存泄露检测实现:

                f(n) > f(n-1)

                (f(n)-f(1))/(n-1)>阈值,判断为内存泄露

        4、hprof文件分析:Android studio,打开Captures窗口,点击Android Studio主窗口右边栏上的Analyzer Tasks,选择分析项开始分析


  三、内存泄露-原因分析

  1.  安卓端:
    1. 单例导致内存泄露:单例的生命周期同应用的生命周期,如果往这个单例中传了一个生命周期较短的对象,如activity等就会导致内存泄露(退出activity的时候依然被持有),构造单例的时候,尽量使用Application的上下文   
    2. 非静态内部类导致的内存泄漏  :该种类默认持有外部
  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
性能测试中的内存泄漏是一个重要的指标,它可以帮助我们检测出程序中存在的内存管理问题。下面是一些常用的方法来测试内存泄漏: 1. 基本的观察和监测:通过观察程序在运行时的内存使用情况,可以初步判断是否存在内存泄漏。一般情况下,如果程序的内存使用量持续增长而没有明显的回收迹象,就可能存在内存泄漏。 2. 内存分析工具:使用专门的内存分析工具,如Valgrind、JProfiler、Xcode Instruments等,可以对程序进行详细的内存分析。这些工具可以帮助检测出内存泄漏的具体位置和原因。 3. 垃圾回收日志分析:对于使用垃圾回收机制的语言,可以开启垃圾回收日志,并进行分析。通过分析垃圾回收日志,可以了解对象的创建和销毁情况,从而判断是否存在内存泄漏。 4. 压力测试:通过对程序进行压力测试,模拟高并发场景或大数据量场景,观察程序在长时间运行后内存是否稳定。如果内存持续增长,可能存在内存泄漏。 5. 自动化测试:编写专门的测试用例和测试脚本,对程序的各个功能进行全面的测试,并观察内存使用情况。通过多轮的自动化测试,可以发现潜在的内存泄漏问题。 需要注意的是,内存泄漏可能是由于资源未正确释放导致的,也可能是由于对象引用未正确管理导致的。因此,在进行性能测试时,需要仔细观察程序的内存使用情况,并结合其他工具和方法来进行准确的内存泄漏检测

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值