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//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

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

原文出处:https://www.cnblogs.com/liushengchieh/p/10514978.html

JLA服务器性能测试,Shell脚本 | 性能测试之CPU占有率相关推荐

  1. android cpu负载 工具,【专家专栏】Android性能测试之CPU

    原标题:[专家专栏]Android性能测试之CPU ▌Android性能测试 性能测试是手机应用测试中很重要的一个模块. 一般情况下,性能测试主要关注的指标有:CPU.内存占用.电量消耗.GPU.FP ...

  2. shell编程服务器维护,简单监测服务器的shell脚本

    搜索热词 1.编写shell脚本如下: #!/bin/bash # chkconfig: 2345 10 90 # description:监测linux服务器cpu.内存.磁盘 #cpu平均负载阀值 ...

  3. java让服务器停止运行,java调用远程服务器的shell脚本以及停止的方法实现

    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手.考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端 ...

  4. linux 循环执行ip停止服务,java调用远程服务器的shell脚本以及停止的方法实现

    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手.考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端 ...

  5. linux更新代码脚本,更新本地代码到服务器的shell脚本

    更新本地代码到服务器的shell脚本 用Ubuntu做开发机OS遇到的第一个问题就是将更新的代码放上测试服务器运行 www.ahlinux.com 之前用windows的时候是用Winscp更新代码到 ...

  6. shell通过邮件服务器发送邮件,shell脚本通过sendEmail25端口发送邮件

    1.安装sendEmail工具: 操作见网址:https://blog.csdn.net/rheostat/article/details/7975198 2.查看sendEmail使用说明: (1) ...

  7. linux服务器shell脚本,分享个简易版Linux服务器初始化Shell脚本

    该Shell脚本主要用于新安装Linux服务器系统的初始化工作,具体包括: 关闭IPv6模块 关闭SELinux 让vim显示颜色 设置系统语言编码 优化系统服务 内核参数优化等. 可以根据自己的实际 ...

  8. mysql查询性能测试工具_性能测试之数据库监控分析工具PMM

    PMM(Percona Monitoring and Management) 是一个用于管理和监控数据库性能的开源平台. . 它能提供全面的基于时间和各类监控指标.计数器的分析. 性能测试中,是做数据 ...

  9. 阿里云8核16G服务器ecs.c6.2xlarge性能评测CPU处理器型号

    阿里云服务器ECS计算型c6实例ecs.c6.2xlarge为4核8G配置,CPU处理器采用Intel Xeon(Cascade Lake) Platinum 8269CY,2.5 GHz主频,睿频3 ...

  10. 阿里云服务器通用算力u1性能测评CPU处理器网络PPS

    阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最 ...

最新文章

  1. python显示行数_jupyter notebook实现显示行号
  2. 对gridview中的一些操作。
  3. 玩转python字体
  4. 【转】QGridLayout 详解
  5. php print r用法,php中echo(),print(),print_r()用法
  6. 高达82 fps的实时文本检测,华科AAAI2020提出可微分二值化模块
  7. 浮点数转换成字符串函数
  8. Git学习笔记一《版本控制之道-使用Git》
  9. Linux jar包 后台运行
  10. android 自定义ratingbar 图片显示不全的解决方案
  11. java 方差_方差(Variance)
  12. 压力测试-LR工具安装
  13. 2012年中国县级市面积排行(截止到2012年7月31日) (zz.IS2120@BG57IV3)
  14. win10显示计算机控制面板,win10控制面板,教您win10如何打开控制面板
  15. 如何从 vue-element-admin 迁移到 Fantastic-admin
  16. 人民币对美元汇率中间价报6.7343元 上调13个基点
  17. HyperX旋火无线游戏鼠标,摆脱“线”制,黑白双煞争分夺秒
  18. 弘辽科技:淘宝搜索流量是什么意思?如何提升流量?
  19. PRA10.3平台API接口调用
  20. 细胞膜负载天然产物竹红菌乙素纳米囊泡|细胞来源的纳米囊泡(Gesicle)包裹药物

热门文章

  1. css3边框背景border-image
  2. 十年工作经验的中层员工如何在大厂生存?
  3. HTML常用meta小结
  4. 2018年中考计算机考试成绩,2018年北京中考考试科目、时间及成绩公布通知
  5. ESXI VIB升级报错
  6. C语言字符串分割 trimmed simplified split
  7. table表格宽带width属性研究
  8. java 获取excel的行数_JAVA使用POI获取Excel的列数与行数
  9. Generative Adversarial Nets[AAE]
  10. 基于模型的系统工程及数字工程技术研讨会