第一种是
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()