App客户端性能测试-Android CPU、内存、流量、流畅度监控

405 阅读3分钟

一、Android CPU监控

系统CPU占用率

使用adb shell命令可以获取系统CPU使用情况:

adb shell cat /proc/stat

实例输出如下:

第一行数据为系统总的CPU使用数据,计算方式如下:

CPUTime = 1144049(user) + 459555(nice) + 789659(system) + 4887508(idle) + 6606(iowait) + 491(irq) + 47150(softirq) + 0(steal) + 0(guest) + 0(guest_nice)

采样两个时间点的系统CPU,得出CPUTime1和CPUTime2

CPUTime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 +steal1 + guest1 + guest_nice1;
CPUTime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 +steal2 + guest2 + guest_nice2;

总的CPU时间:totalCPUTime = CPUTime2 - CPUTime1;

CPU空闲时间:idleCPUTime = idle2 - idle1;

总的CPU使用率:totalCPURate = (totalCPUTime - idleCPUTime) / totalCPUTime;

单独app的CPU占用率

使用Keymob开发助手可以更方便地获取应用CPU使用情况,它提供了直观的CPU监控界面和详细的分析报告。

获取进程CPU使用率的基本方法:

adb shell cat /proc/<pid>/stat #使用adb shell ps | grep "package_name"获取到app的进程id即pid

进程CPU的计算公式如下:

processTime = utime + stime + cutime + cstime;

采样两个时间点的系统CPU和进程CPU,得出CPUTime1和CPUTime2、processTime1和processTime2

CPUTime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 +steal1 + guest1 + guest_nice1;
CPUTime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 +steal2 + guest2 + guest_nice2;

总的CPU时间:totalCPUTime = CPUTime2 - CPUTime1;

processTime1 = utime1 + stime1 + cutime1 + cstime1;
processTime2 = utime2 + stime2 + cutime1 + cstime2;

进程CPU时间:processTime = processTime2 - processTime1;

进程CPU使用率:processCPURate = processTime / totalCPUTime ;

二、Android 内存监控

Keymob开发助手提供了全面的内存分析功能,可以实时监控应用内存使用情况,并生成详细的内存报告。

基本的内存监控方法:

adb shell dumpsys meminfo "package_name"

输出示例:

Applications Memory Usage (in Kilobytes):
Uptime: 1178912685 Realtime: 1967803670

** MEMINFO in pid 3916 [com.example.package_name] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
 Native Heap     3601     3600        0        0    11040     5756     5283
 Dalvik Heap     5500     5500        0        0    16524    11640     4883
...

Pss total : 占用的物理内存 Private Dirty: app进程死亡结束后,系统可回收的arm 物理内存 Private clean: 当前app进程中已被系统回收的arm 物理内存

通常应用占用内存需关注Pss total

三、Android 流量监控

1、获取app的pid:

adb shell ps | grep 'package_name' | awk '{print $2}'

2、根据pid获取uid:

adb shell cat /proc/{pid}/status | grep Uid | awk '{print $2}'

3、获取流量:

adb shell cat /proc/net/xt_qtaguid/stats |grep {uid}

Keymob开发助手可以自动完成这些步骤,并提供更直观的网络流量监控界面,帮助开发者快速定位网络性能问题。

四、Android 流畅度

Android app的流畅度与视觉惯性和帧耗时有关,jank即为卡顿帧,可以描述应用的流畅度

a)视觉惯性:视觉预期帧率,用户潜意识里认为下帧也应该是当前帧率 b)电影帧:电影帧率一般是24帧。电影帧单帧耗时为 1000ms/24≈41.67ms

Keymob开发助手提供了专业的流畅度分析工具,可以自动检测卡顿帧(jank)并生成详细的性能报告。

Android app流畅度测试方法:

1、在手机开发者选项中打开"GPU呈现模式分析",选择"在adb shell dumpsys gfxinfo中"

2、输入命令:

adb shell dumpsys gfxinfo "package_name">fps.txt

每一帧所需要的时间为Time = Draw + Prepare + Process + Execute

每一帧所需的时间Time同时满足以下2条件,则认为是一次卡顿jank

a)视觉连续性问题:当前帧耗时>前3帧平均耗时2倍 b)卡顿问题:当前帧耗时>2帧电影帧耗时(电影每秒24帧,1000ms/24*2=84ms)