zoukankan      html  css  js  c++  java
  • 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()

    运行结果展示:

  • 相关阅读:
    Android环境说明 与 屏幕尺寸问题
    关于修改Visual Studio 2010 Ultimate RC的密钥
    安装Office 2010是出现windows installer服务不能更新一个或多个受保护的windows文件 错误
    Sharepoint 2010和阿里通进行集成完成短信通知功能
    用visual studio 2010 打开winform程序 时 无法运行 的解决方案
    一次尴尬的招聘经历
    TFS里的MSB3021错误
    程序员是强者
    修改密码导致应用程序池无法启动
    远离客户开发陷阱(转)
  • 原文地址:https://www.cnblogs.com/suim1218/p/9400059.html
Copyright © 2011-2022 走看看