Android 是一个基于 Linux 内核的移动操作系统,Linux 的 CPU 占有率的计算方式也可以应用到 Android App 上。

今天分享的这个脚本的功能,是在多核情况下计算进程的 CPU 占有率。详细的算法,有一篇别人写的关于 Linux 环境下计算进程和线程的 CPU 占有率的文章,推荐一读,链接附在文末。

这里就简单说下计算步骤吧:

1.获取测试设备的 CPU 核心数

2.计算进程的 CPU 使用时间

3.计算总的 CPU 使用时间

4.进程的 CPU 使用率 = (进程的 CPU 使用时间 / 总的 CPU 使用时间) * CPU 核心数 * 100

代码如下:

#!/usr/bin/env bash
# 创建输出文件夹和临时文件夹
function init_data() {
if [[ ! -d ${OUTPUT} ]]; then
mkdir -p ${OUTPUT}
fi
if [[ ! -d ${TEMP_FILE} ]]; then
mkdir -p ${TEMP_FILE}
fi
}
# 通过adb shell ps命令获取进程号
function get_pid() {
adb shell ps | grep ${1} | tr -d $'\r' | awk '{print $2}' | head -n 1
}
# 通过adb shell cat /proc/cpuinfo命令计算出CPU核心数
function get_cpu_ker() {
adb shell cat /proc/cpuinfo | grep "processor" > ${TEMP_FILE}/processor_count
cpu_ker_count=`awk 'END{print NR}' ${TEMP_FILE}/processor_count`
echo ${cpu_ker_count}
}
# 通过adb shell cat /proc/<pid>/stat命令计算出进程CPU时间
function process_cpu_time() {
adb shell cat /proc/${1}/stat > ${TEMP_FILE}/process_cpu_time
utime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $14}')
stime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $15}')
cutime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $16}')
cstime=$(cat ${TEMP_FILE}/process_cpu_time | awk '{print $17}')
result=`expr ${utime} + ${stime} + ${cutime} + ${cstime}`
echo ${result}
}
# 通过adb shell cat /proc/stat命令计算出总CPU时间
function total_cpu_time() {
adb shell cat /proc/stat > ${TEMP_FILE}/total_cpu_time
cat ${TEMP_FILE}/total_cpu_time | grep "cpu" | head -n 1 > ${TEMP_FILE}/total_cpu
user=$(cat ${TEMP_FILE}/total_cpu | awk '{print $2}')
nice=$(cat ${TEMP_FILE}/total_cpu | awk '{print $3}')
system=$(cat ${TEMP_FILE}/total_cpu | awk '{print $4}')
idle=$(cat ${TEMP_FILE}/total_cpu | awk '{print $5}')
iowait=$(cat ${TEMP_FILE}/total_cpu | awk '{print $6}')
irq=$(cat ${TEMP_FILE}/total_cpu | awk '{print $7}')
softirq=$(cat ${TEMP_FILE}/total_cpu | awk '{print $8}')
result=`expr ${user} + ${nice} + ${system} + ${idle} + ${iowait} + ${irq} + ${softirq}`
echo ${result}
}
# 计算进程的CPU占有率
function get_cpu_rate() {
process_cpu_time1=`process_cpu_time ${1}`
total_cpu_time1=`total_cpu_time`
sleep 1s
process_cpu_time2=`process_cpu_time ${1}`
total_cpu_time2=`total_cpu_time`
process_cpu_time3=$(( ${process_cpu_time2} - ${process_cpu_time1} ))
total_cpu_time3=$(( ${total_cpu_time2} - ${total_cpu_time1} ))
cpu_rate=$(bc <<< "scale=3;(${process_cpu_time3}/${total_cpu_time3})*${2}*100")
result=$(echo "scale=0;${cpu_rate}/1" | bc -l)
echo ${result}
}
# 获取脚本所在的路径
WORKSPACE=`pwd`
# 输出文件夹
OUTPUT=${WORKSPACE}/output_cpu
# 临时文件夹
TEMP_FILE=${OUTPUT}/temp
# 创建文件夹
init_data
# 获取应用包名
PACKAGE_NAME=${1}
# 获取进程号
pid=`get_pid ${PACKAGE_NAME}`
# 获取CPU核心数
cpu_ker=`get_cpu_ker`
# CPU占有率
rate=`get_cpu_rate ${pid} ${cpu_ker}`
echo ${rate}
# 返老还童
rm -r output_cpu

参考链接:

Linux环境下进程的CPU占用率


欢迎关注微信公众号"测试开发Stack",更多精彩文章第一时间发布!

Shell脚本 | 性能测试之CPU占有率的更多相关文章

  1. Shell脚本 | 性能测试之启动流量

    安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...

  2. Shell脚本 | 性能测试之启动时间

    安卓应用的性能测试,通常包括六个指标:启动时间.内存.CPU.耗电量.流量.流畅度. 除了耗电量,其他五个指标的数据在我们团队中已经可以通过运行脚本的方式获取到. 今天给大家分享下启动时间的脚本吧- ...

  3. Shell脚本 | 性能测试之内存

    性能测试中,内存是一个不可或缺的方面.比如说在跑 Monkey 的过程中,如何准确持续的获取到内存数据就显得尤为重要. 今天分享一个脚本,可以在给定时间内持续监控内存,最后输出成一份 CSV 文件,通 ...

  4. Android应用性能测试之CPU和内存占用

    最近发现自己学的很多东西没有做好积淀的工作,也萌生了写一些东西的念头.本人也没有写博客的习惯,下边就写一下手机端的性能测试. 最近公司,要我们从事对竞品的性能测试,我负责CPU和内存的性能测试,下面就 ...

  5. shell脚本之获取CPU使用率

    今天一个同事要测试OJ项目,同时我这边也需要知道他在压测过程中, CPU的使用率怎么样,虽说可以用top实时查看,但是进程太多了,我不需要获取那么多信息,我仅仅只要知道当前压测过程中CPU实时的使用率 ...

  6. Android 性能测试之CPU

    接上一篇 CPU跟内存一样,存在一些测试子项,如下清单所示 1.空闲状态下的应用CPU消耗情况 2.中等规格状态下的应用CPU消耗情况 3.满规格状态下的应用CPU消耗情况 4.应用CPU峰值情况 C ...

  7. [Android Pro] Android应用性能测试之CPU和内存占用(转载)

    首先稍做分析一下测试环境:我们知道CPU和内存占用是一个实时变化的状态,而市面上还没有具体的哪款android应用能做到实时监控CPU和内存占用并使用log日志保存.考虑到android的底层框架是基 ...

  8. Linux 性能监控之CPU&内存&I/O监控Shell脚本2

    Linux 性能监控之CPU&内存&I/O监控Shell脚本2   by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...

  9. Linux 性能监控之CPU&内存&I/O监控Shell脚本1

    Linux 性能监控之CPU&内存&I/O监控Shell脚本1   by:授客 QQ:1033553122   #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...

随机推荐

  1. ionic3使用第三方图标

    1.打开阿里图标库http://www.iconfont.cn 2.找到自己所需的图标,加入购物车(免费使用的) 3.打开购物车,点击右下角(下载代码) 4.解压文件,打开demo_unicode.h ...

  2. Linux module 添加到bashrc 和临时ifort编译器 以及python2和3的配置

    第一步vim ~/.bashrc按键盘的i然后source /home/export/online1/bjpara/para/modules/scripts/cn-module.sh最后:x! bas ...

  3. AndroidStudio 3 export jar file

    1.  File -> New -> New Module -> Android Library  例子中暂命名ModuleA 2. 修改刚创建 ModuleA下的build.gra ...

  4. 74.CocoaPods安装和使用教程

    CocoaPods安装和使用教程  Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 第一: Coco ...

  5. 获取sql 时间时分秒

    select DATE_FORMAT(now(),'%Y-%m-%d %T') from dual;  年月日时分秒 select DATE_FORMAT(now(),'%T') from dual; ...

  6. 【转】Map 与 Unordered_map

    map和unordered_map的差别和使用 map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/b ...

  7. Linux连不上校园网怎么办?

    原本,在我们学校我只要连上WiFi打开浏览器, 它就会自动重定向到校园网登录的界面.但是今天浏览器并没有自己打开登录页面,一直在加载.于是我想直接登录路由器,在地址栏输入192.168.0.1,结果它 ...

  8. 分布式任务调度系统xxl-job源码探究(二、服务中心)

    接下来看下服务端代码 服务端源码 服务端通过管理quartz定时任务组件,分发任务 先从入口看起,由web.xml进入,可以看出,自己编写的代码从applicationcontext-xxl-job- ...

  9. spring boot 通过controller跳转到指定 html 页面问题以及请求静态资源问题

    1. 项目结构 2. pom文件配置 重点是红色框内的依赖 3. application配置文件 4. controller 注意使用@Controller注解: @RestController 等价 ...

  10. Spring Boot整合 Thymeleaf 模板引擎

    什么是Thymeleaf Thymeleaf是一款用于渲染XML.XHTML.HTML5内容的模板引擎.类似Velocity,FreeMaker模板引擎,它也可以轻易的与Spring MVC等Web框 ...