app性能测试:(二)CPU
下面对CPU进行分析:
-
查看CPU使用情况(首先需要打开对应app)
命令:adb shell top -n 1 | findstr 包名
运行结果PID UID PR CPU% S #THR VSS RS PCY packageName 28210 u0_a129 10 -10 18% S 42 1814932K 160848K fg 包名
列名 | 含义 |
---|---|
PID | 进程 ID |
UID | 进程 ID |
PR | 优先级 |
CPU% | 当前瞬间占用 CPU 百分比 |
S | 进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
#THR | 线程数 |
VSS | Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) |
RSS | Resident Set Size 实际使用物理内存(包含共享库占用的内存) |
PCY | 调度策略优先级,SP_BACKGROUND/SPFOREGROUND |
NAME | 进程名 |
top 命令还支持一些命令行参数,详细用法如下:
Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num 最多显示多少个进程
-n num 刷新多少次后退出
-d num 刷新时间间隔(单位秒,默认值 5)
-s col 按某列排序(可用 col 值:cpu, vss, rss, thr)
-t 显示线程信息
-h 显示帮助文档
监控脚本代码
#/usr/bin/python
#encoding:utf-8
import csv
import os
import time
#控制类
class Controller(object):
def __init__(self, count):
self.counter = count
self.alldata = [("timestamp", "cpustatus")]
#单次测试过程
def testprocess(self):
result = os.popen("adb shell top -n 1 | findstr com.zahd.agriculturaltraceability.debug")
#运行命令得到: 30464 u0_a129 10 -10 22% S 44 1823308K 158792K fg ...
for line in result.readlines():
cpuvalue = line.split("%")[0] #30464 u0_a129 10 -10 24 for line in result.readlines():
result1 = line.split("%")[0]#得到 30464 u0_a129 10 -10 24
result2=result1.split(" ")#根据空格隔开
cpuvalue=result2[len(result2)-1]#获取数组最后一个,即为cpu%
currenttime = self.getCurrentTime()
self.alldata.append((currenttime, cpuvalue))
#多次执行测试过程
def run(self):
while self.counter >0:
self.testprocess()
self.counter = self.counter - 1
time.sleep(3)
#获取当前的时间戳
def getCurrentTime(self):
currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
return currentTime
#数据的存储
def SaveDataToCSV(self):
csvfile = open('cpustatus.csv', 'w')
writer = csv.writer(csvfile)
writer.writerows(self.alldata)
csvfile.close()
if __name__ == "__main__":
controller = Controller(10)
controller.run()
controller.SaveDataToCSV()
监控过程,需要手动操作app