性能测试必备知识(7)- 深入理解“CPU 使用率”
做性能测试的必备知识系列,可以看下面链接的文章哦
https://www.cnblogs.com/poloyy/category/1806772.html
回顾
CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示
灵魂拷问
最常用什么指标来描述系统的 CPU 性能?
回答
CPU 使用率,而不是平均负载,CPU 上下文切换
CPU 使用率
前言
前面说过,Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,在通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉
了解节拍率
- 为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数
- 每发生一次时间中断,Jiffies 的值 就加 1。
- 节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等
- 不同的系统可能设置不同数值,你可以通过查询 /boot/config 内核选项来查看它的配置值
- 比如在我的系统中, 节拍率设置成了 1000,也就是每秒钟触发 1000 次时间中断。
grep 'CONFIG_HZ=' /boot/config-$(uname -r)

了解用户空间节拍率
- 因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问
- 为了方便用户空间程序,内核还提供了一个用户空间节拍率 USER_HZ
- 它总是固定为 100,也就是 1/100 秒
- 这样,用户空间程序并不需要关心内核中 HZ 被设置成了多少,因为它看到的总是固定值 USER_HZ
系统 CPU 数据来源(了解)
- Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息
- 而 /proc/stat 提供的就是系统的 CPU 和任务统计信息
只查看 CPU 的数据
cat /proc/stat | grep ^cpu

结果分析
从左往右一共 11 列哦
- CPU 编号:第一行是 CPU 的累加
- user(us):用户态 CPU 的时间,不包括下面的 nice 时间,但包括了 guest 时间
- nice(ni):低优先级用户态 CPU 的时间,就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间;注意 nice 可取值范围是 -20 到 19,数值越大,优先级反而越低
- system(sys):内核态 CPU 的时间
- idle(id):空闲时间,它不包括等待 I/O 的时间(iowait)
- iowait(wa):等待 I/O 的 CPU 时间
- irq(hi):处理硬中断的 CPU 时间
- softirq(si):处理软中断的 CPU 时间
- steal(st):当系统运行在虚拟机中的时间,被其他虚拟机占用的 CPU 时间
- guest:通过虚拟化运行其他操作系统的时间,就是运行虚拟机的 CPU 时间
- guest_nice(gnice):以低优先级运行虚拟机的时间
CPU 使用率计算公式(了解)
除了空闲时间外的其他时间占总 CPU 时间的百分比

灵魂拷问
/proc/stat 的数据,算的是什么时间段的 CPU 使用率?
回答
这是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般没啥参考价值
性能工具所看到的 CPU 使用率的实际计算方法
为了计算 CPU 使用率,性能工具一般都会取间隔一段时间(比如 3 秒)的两次值,作差后,再计算出这段时间内的平均 CPU 使用率

总结下
- 各种各样的性能分析工具已经帮我们计算好了 CPU 平均使用率,不需要自己单独计算
- 不过要注意的是,性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,
性能测试必备知识(7)- 深入理解“CPU 使用率”的更多相关文章
- 性能测试必备知识(5)- 深入理解“CPU 上下文切换”
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 前言 上一篇文章中,举例了大量进程等待 CP ...
- 性能测试必备知识(6)- 如何查看“CPU 上下文切换”
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 课前准备,安装 sysbench 下载 sy ...
- 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...
- 性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 缓存 从 free 命令可以看到,缓存其实就 ...
- 性能测试必备知识(4)- 使用 stress 和 sysstat
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html stress 介绍 Linux 系统压力测试 ...
- 性能测试必备知识(10)- Linux 是怎么管理内存的?
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 内存映射 日常生活常说的内存是什么 比方说, ...
- (原创)性能测试中,Oracle服务器定位CPU使用率高的瓶颈(SQL)
本篇博客记录一次性能测试过程中,定位对CPU使用率高的瓶颈问题,主要定位SQL为准 一.用SQL命令定位1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据 ...
- 性能测试分析过程(二)cpu 使用率过高的分析方法
Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...
- CPU使用率和平均负载
转载: https://mp.weixin.qq.com/s?__biz=MzU4NzU0MDIzOQ==&mid=2247487782&idx=3&sn=3f04bb053d ...
随机推荐
- sql 更新时 实现 数字字段自加1
第一种:直接使用SQL语句,这种方式可以避免并发操作造成的数据不一致问题UPDATE 表名称 SET 列名称 = 列名称 + 1 WHERE …… 第二种:将上面的语句逻辑封装成一个存储过程,加上事务 ...
- flask的小错误
这几天刚学flask,根据录屏学代码的时候,遇到一个问题 基本能看懂错误,role_id是类的一个字段,应该是一个对象,最后发现是单词写错了,应该是大写的Column, db.Column(db.In ...
- 一个神奇的SQL语句
题目是这样的: 分别往这两张表中添加3条数据... 查询营业额最高商家的商品总价与营业额最低商家的商品总价差是多少(5分)CREATE VIEW vm2 AS SELECT price*limit_n ...
- java语言进阶(三)_List_Set_数据结构_Collections
主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 1.1 数据结构有什么用? 常见的数据结构:堆.栈.队列.数组.链表和红黑树 . 1.2 常见的数据结构 栈 栈 ...
- 嘿,java打怪升级攻略
Java成神之路 第一层 java基础 **当你通过本层所有关卡,你可以完成一些简单的管理系统.坦克大战游戏.QQ通信等. ** 第二层 数据库 数据库类型很多例如:MySQL.oracle.redi ...
- JavaGUI练习 - 正交测试用例生成小工具
正交表生成小工具 说明 小工具的适用对象主要是测试人员,他们日常工作中手动设计大量测试用例,工作繁杂甚至还存在覆盖不全面等问题. 为了提高他们的测试效率,该小工具可以通过输入一组多因素多水平的数据,然 ...
- 「疫期集训day13」雾天
我们千里迢迢赶来这里支援协约国----与德军正面交锋的美国士兵 今天考试签到题都没A,失误重大,T1几周前做过的拓扑排序板子都没写,T2失误在没敢调试,对自己信心不足,30分钟写了个DP,几分钟没调出 ...
- cin cout 的优化(神优化)外号:神读入
在比赛里,经常出现数据集超大造成 cin TLE的情况.这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论.其实像上文所说, ...
- POJ 3631 Cow Relays Floyd+矩阵快速幂
题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...
- MVC + EFCore 项目实战 - 数仓管理系统2- 搭建基本框架配置EFCore
本次课程就正式进入开发部分. 首先我们先搭建项目框架,还是和之前渐进式风格保持一致,除必备组件外,尽量使用原生功能以方便大家理解. 开发工具:vs 2019 或以上 数据库:SQL SERVER 20 ...