• Shell脚本 | 性能测试之CPU占有率


    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 $'
    ' | 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",更多精彩文章第一时间发布!

  • 相关阅读:
    TensorFlow 1.2.0新版本完美支持Python3.6,windows在cmd中输入pip install tensorflow就能下载应用最新tensorflow
    两眼论&矩阵变现理论结合打造赚钱大模式
    《影响力》6个使人顺从的武器之一互惠原理深入剖析
    电子书如何定位、如何取名呢?电子书文案模型的6个要点
    《影响力》顺从心理学6个使人顺从的策略
    SEO三种职位类型:编辑型SEO、技术型SEO、营销型SEO详解
    json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
    防DNS劫持教程,手动修复本地DNS教程
    拆分字符串
    计算目录下文件数
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/10514978.html
Copyright © 2020-2023  润新知