• 3、获取APP 内存占用率


    关于APP内存占用,不用多说,应该是APP性能测试中比较重要的一点。试想一下,开个应用把手机内存占满了,其它应用无法打开,那么这个应用还会有人安装吗?我觉得是没有的。下面就通过adb命令获取APP虚存和实存数据。

    top 用法

    参数解释:

       -m num  Maximum number of processes to display.   //最多显示多少个进程
        -n num  Updates to show before exiting.           //刷新次数 
        -d num  Seconds to wait between updates.          //刷新间隔时间(默认5秒)
        -s col  Column to sort by (cpu,vss,rss,thr).      //按哪列排序 
        -t      Show threads instead of processes.        //显示线程信息而不是进程
        -h      Display this help screen.                 //显示帮助文档

    Windows下获取APP 内存占用率

    adb shell top 

    参数解释:

    第一组数据的含义:

    1.  User 处于用户态的运行时间,不包含优先值为负进程
       Nice 优先值为负的进程所占用的CPU时间
       Sys 处于核心态的运行时间
       Idle 除IO等待时间以外的其它等待时间
       IOW IO等待时间
       IRQ 硬中断时间
       SIRQ 软中断时间

    第二组数据的含义:

    1.  PID 进程id
       PR 优先级
       CPU% 当前瞬时CPU占用率
       S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
       #THR 程序当前所用的线程数
       VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
       RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
       PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
       Name 进程的名称

    那么实际测试过程中,我们肯定要获取多次虚存和内存进行比对,所以我们可以把log保存到本地,并且设置多长时间记录一次。

    adb shell top -d 20 > meminfo  // 每20s记录一次,并把日志保存到meminfo里面

    那么问题又来了。日志我们有了,但是里面的数据实在是太多了,我们不可能一个一个找,不然一天都找不玩,所以,我们依旧通过写脚本方式从日志里面获取我们想要的虚存和实存信息。

    python脚本获取APP 虚存/实存

    #/usr/bin/python
    #encoding:utf-8
    import csv
    import os
    import  time
    
    #控制类
    class Controller(object):
        def __init__(self):
            #定义收集数据的数组
            self.alldata = [("id", "vss", "rss")]
    
        #分析数据
        def analyzedata(self):
            content = self.readfile()
            i = 0
            for line in content:
                if "com.begoit.studyplan" in line:
                    print line
                    line = "#".join(line.split())
                    vss = line.split("#")[7].strip("K")
                    rss = line.split("#")[8].strip("K")
    
                    #将获取到的数据存到数组中
                    self.alldata.append((i, vss, rss))
                    i = i + 1
    
        #数据的存储
        def SaveDataToCSV(self):
            csvfile = file('meminfo.csv', 'wb')
            writer = csv.writer(csvfile)
            writer.writerows(self.alldata)
            csvfile.close()
    
        #读取数据文件
        def readfile(self):
            mfile = file("meminfo", "r")
            content = mfile.readlines()
            mfile.close()
            return  content
    
    if __name__ == "__main__":
        controller = Controller()
        controller.analyzedata()
        controller.SaveDataToCSV()

    运行结果展示:

  • 相关阅读:
    一些常用的正则表达式
    ASP.net国际化页面可以选择输出语言
    SQL 2008 数据表导入到 ORACLE 10g
    转载 SQL Server 2008中增强的汇总技巧
    类似于行转列的一种需求
    第一次
    很奇怪的一个SQL 语句
    MS SQL 中 FULL JOIN 的用法
    [转载]网络编辑必知常识:什么是PV、UV和PR值 zz
    寒假学习2实验一Linux系统的安装和常用命令
  • 原文地址:https://www.cnblogs.com/suim1218/p/9400059.html
Copyright © 2020-2023  润新知