第一种是
adb shell dumpsys meminfo | grep com.android.contacts  取Native Heap(c++内存),DalvikHeap(java代码new出来的内存) Total:总量  三个值
![]()
 
 
分别三个绘成曲线---主要看操作业务时候曲线是不是直线上升,业务结束后会不会回落,整体操作一段时间曲线的趋势是不是向上,向上就存在内存泄漏,内存泄漏最终会导致内存溢出
问题点1:内存曲线是不是突然直线90度上升几百兆(mb)
问题点2:多次操作业务流程,整体的曲线是不是向上的。  回落的值减去启始值就是泄漏值,100mb内都是正常,100以上都是有问题
问题3:上下版本的内存峰值变化不大
第二种是
adb shell top -d 1 > meminfo  操作一段时间(一个小时)被测应用业务
文件放在目录下读取meminfo找到对应包名的那行,提取虚存和实存,做曲线查看
vss内存变化--曲线变化几百兆有问题
6000kb=6兆
vss:虚存
rss:实存
横向参考
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.android.contacts" in line:
                print(line)
                line = "#".join(line.split())
                vss = line.split("#")[5].strip("K")
                rss = line.split("#")[6].strip("K")
                #将获取到的数据存到数组中
                self.alldata.append((i, vss, rss))
                i = i + 1
    #数据的存储
    def SaveDataToCSV(self):
        csvfile = open('meminfo.csv', 'w')
        writer = csv.writer(csvfile)
        writer.writerows(self.alldata)
        csvfile.close()
    #读取数据文件
    def readfile(self):
        mfile = open("meminfo", "r")
        content = mfile.readlines()
        mfile.close()
        return  content
if __name__ == "__main__":
    controller = Controller()
    controller.analyzedata()
    controller.SaveDataToCSV()