版权声明:本文出自胖喵~的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/5143192.html

前言


  第一节讲CPU的时候留下了一个疑问,就是由于Android手机系统本身的缺陷造成采集CPU百分比数据会有很大的误差,那么如何分析CPU这个指标呢?

  这节我们就来讲讲如何用CPU时间片这个指标来衡量系统CPU的占用或者一款App对系统CPU的占用。

概念


  首先需要知道,在Linux系统下,CPU利用率分为用户态、系统态、空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。(如下图)

  CPU使用率计算公式如下:

  

  那么我们来看看怎么这个时间究竟是什么?

  

  先介绍几个和Linux时间有关的名词:HZ、tick与jiffies。

  HZ:Linux 核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。例如HZ为1000,就代表每秒有1000次timer interrupts。

这是我在Nexus 5 上截取的手机试试的一个cpu频率

  Tick :Tick是HZ的倒数,Tick = 1/HZ 。即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。

  Jiffies :Jiffies 为Linux核心变数,是一个unsigned long类型的变量,它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加1.

  所以我们可以得出,CPU利用率计算公式也就是:

  那么如果查看Jiffies 值呢?

Jiffies


  查看Jiffies的方法,我需要在shell中输入cat /proc/stat命令

 

  上图中的前5行是我们关注的重点,首先纵向CPU0、CPU1、CPU2、CPU3说明当前手机是四核的CPU,代表了每个核的Jiffies ,第一行CPU 就代表总的的Jiffes。

  而每一列的数值分别代表了(如上图所示),详细的含义如下:

    user :从系统启动开始累计到当前时刻,用户态的jiffies ,不包含 nice值为负进程;

    nice :从系统启动开始累计到当前时刻,nice值为负的进程所占用的jiffies;

    system :从系统启动开始累计到当前时刻,系统态的jiffies;

    idle :从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待的jiffies;

    iowait : 从系统启动开始累计到当前时刻,硬盘IO等待的jiffies;

    irq : 从系统启动开始累计到当前时刻,硬中断的jiffies;

    softirq :从系统启动开始累计到当前时刻,软中断的jiffies。

  总的Jiffies就是上面所有项加起来的总和。因此我们计算一段时间的CPU占用率的时候就可以使用:

    total=user+system+nice+idle+iowait+irq+softirq

    cpu usage=[(user_end +sys_end+nice_end) - (user_begin + sys_begin+nice_begin)]/(total_end - total_begin)*100

进程的Jiffes


  根据上面的介绍我们已经知道了Jiffies的作用,所以当有的时候我们需要查看一个App的CPU性能时,就需要对该App应用的进程的Jiffies进行分析。获取应用Jiffies的方法这里还是介绍两种,一种是使用GT直接采集,第二种是命令行查看的方式。

  一、GT采集

    如同前一节的方法一样,选择好要采集的应用(以qq为例),勾选Jiffes,开始采集即可。(如下图)

  一般我们关注的是应用的前台进程,从进程名我们可以区分出来:

  使用GT,可以直接查看数据,也可以将源数据保存下来,自己做分析。

  二、shell获取

  shell的命令为: cat /proc/进程id/stat

  首先我们需要使用 ps 命令查看qq这个应用的前台进程的进程id是多少,然后再去查看它的信息,如下图:

  我们可以看到,得到了很多数据,这些数据的含义分别是:

    pid=20324  进程号(平时所说的pid)
    comm=(encent.mobileqq) 应用程序或命令的名字
    task_state=S 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
    ppid=174 父进程ID
    pgid=174 线程组号
    sid=0 c该任务所在的会话组ID
    tty_nr=0 (pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号
    tty_pgrp=-1 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。
    task->flags=1077936448 进程标志位,查看该任务的特性
    min_flt=166543 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数
    cmin_flt=1212  累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目
    maj_flt=454 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数
    cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目
    utime=8582 该任务在用户态运行的时间,单位为jiffies
     stime=3419 该任务在核心态运行的时间,单位为jiffies
    cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies
    cstime=7 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies
    priority=20 任务的动态优先级
    nice=0 任务的静态优先级

    .......(内容太多,如需了解自己去查阅资料吧,这里只介绍和本节有关的)

  根据上面每个字段的含义,我们就可以知道,当前进程的我们要的Jiffies值就是utime和stime的和。

【Android测试】【第二节】性能——CPU时间片的更多相关文章

  1. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 <上>

    前置步骤: 上一篇的Python单元测试框架unittest,我认为相当于功能测试测试用例设计中的用例模板,在自动化用例的设计过程中,可以封装一个模板,在新建用例的时候,把需要测试的步骤添加上去即可: ...

  2. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 -- iframe专题 <下>

    学习目的: 掌握iframe矿建的定位,因为前端的iframe框架页面元素信息,大多时候都会带有动态ID,无法重复定位. 场景: 1. iframe切换 查看iframe 切换iframe 多个ifr ...

  3. 【Android测试】【第一节】性能——CPU

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5065083.html 前言 本来打算写完全部的自动化测试之 ...

  4. android内部培训视频_第二节 布局基础

    第二节:布局入门 一.线性布局 需要掌握的属性: 1.orientation:排列方式 vertical:垂直 Horizontal:水平 2.weight:水平布局的权重 3.gravity:子控件 ...

  5. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  6. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

  7. 【Android测试】【第六节】Monkey——认识和使用

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4688880.html 自动化工具 接触安 ...

  8. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  9. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

随机推荐

  1. MVC WEB安全——XSS攻击防御

    XSS(跨站脚本攻击) 描述: 原理:攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到攻击用户的特殊目的. 类别: 1)被动注入(Passive Inj ...

  2. IOS 获取最新设备型号方法

    1.IOS 获取最新设备型号方法列表最新对照表:http://theiphonewiki.com/wiki/Models方法: #import "sys/utsname.h” struct ...

  3. wp控件

    导航控件 Silverlight的Windows Phone应用程序是基于一种可以让用户在不同页面内容间来回导航的页面模型.这个模型是基于其中的frame控件,而页面间的导航就是靠它. 下面的表格列出 ...

  4. 【BZOJ】2321: [BeiJing2011集训]星器(数学+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2321 完全想不到.. 第一眼以为是爆搜,看到数据范围果断放弃:第二眼以为是网络流(因为只有行列操作, ...

  5. 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1084 有一个1A--- 本题没看懂,,不会啊囧..感觉完全设不了状态..看了题解,囧,m<=2 ...

  6. Codeforces Round# 305 (Div 1)

    [Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...

  7. SecureCrt脚本(一)顶级对象之Crt

    Crt自动化 测试 SecureCrt脚本 JS脚本   1.引言 2.关于脚本表头 3.顶级对象'crt'的子属性和方法 3.1.属性 3.1.1.Dialog 3.1.2.Screen 3.1.3 ...

  8. audio.js – 随时随地,播放 HTML5 的声音

    audio.js是一个HTML5标签的简易包装.但它不仅在支持HTML5的浏览器上能够轻松调用标签,并在不支持HTML5的浏览器上也能通过Flash作为B计划使用.除此之外,audio.js所提供的界 ...

  9. HTML5怎样在网页中使用摄像头功能

    怎样在网页中使用摄像头,html5越来越多的使用到实际工作中,那么他怎样调用摄像头呢进行视频聊天,视频监控等活动呢,今天为大家抛砖引玉,教大家怎样实现怎样利用html5实现摄像头视频监控功能.废话不多 ...

  10. 紧挨导航栏下的链接a标签失效

    在我编完网页测试的的时候,发现导航下的链接不能用,不出现小手的图表,而下面的相同的链接都能用.如下图所示 遇到的相同问题的另一个未完成的页面如图 先不谈论其原因,说一下我对第一个页面的解决办法,我在导 ...