关于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()

运行结果展示:

最新文章

  1. 怎样给WordPress分配更多的内存
  2. java权限修饰符
  3. 《驾驭Core Data》 第二章 Core Data入门
  4. 小改动,大作为——C# 4.0中的微小改动
  5. 【转】iOS隐藏导航条1px的底部横线
  6. how tomcat works 读书笔记九 Session管理
  7. Linux删除/boot后该如何恢复
  8. day31 锁 队列 前面课程重点总结
  9. JDK1.8 LocalDateTime 时间类与字符互转
  10. redis集群中的主从复制架构(3主3从)
  11. css text-align文字两端对齐
  12. 《FPGA全程进阶---实战演练》第十章 数码管实验
  13. oracle的分析函数over(Partition by...) 及开窗函数
  14. java基础(三) 加强型for循环与Iterator
  15. 多角度看.NET面试题
  16. php 抽象 继承 多态
  17. 全球数据库-->基金/管理产品-->分类/行业平均
  18. HTML5学习总结——相关练习与项目
  19. C语言基础二
  20. 解决: PyInstaller打包后exe文件打开时出现failed to execute script

热门文章

  1. STemWin5.22移植笔记(flyheart)
  2. Ettercap详细参数
  3. Oracle高水位线(HWM)及性能优化
  4. DataFrame读取CSV文件
  5. Python 文件及文件夹处理
  6. Java数据类型简介
  7. UVA_548Tree
  8. 07、python的基础-->数据类型、集合、深浅copy
  9. Spring Cloud服务安全连接
  10. leetcode.数组.565数组嵌套-Java