CPU利用率和CPU负荷(CPU usage vs CPU load)
对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷。

其中%Cpu相关的内容:
us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗的 CPU 时间百分比,id表示idle time,
wa表示IO waiting time,hi表示硬中断(Hardware IRQ)占用CPU的百分比;
si表示软中断(Software Interrupts)占用CPU的百分比;
st表示steal time:在内存紧张环境下,pagein 强制对不同的页面进行的 steal 操作。虚拟服务占用的CPU时间百分比。
(%steal 不为 0 说明,当前 OS 是在虚拟机调度器的管理下运行的,且存在其它 OS 也被虚拟机调度器管理。)
其中load average有3个值,分别记录了当前1min,5min,15min的系统平均负载。
用uptime指令也能显示这3个值:
root@Ubuntu01:~# uptime
02:55:15 up 43 min, 1 user, load average: 0.09, 0.25, 0.13
CPU usage:
cpu usage或cpu utilization即 cpu 利用率,就是程序对CPU时间片的占用情况。参见https://en.wikipedia.org/wiki/CPU_time。
cpu 利用率是基于 /proc/stat 文件中的内容得到的:

详细说明见参考文档。
=> 进程cpu使用率:
基于 /proc/<pid>/stat 文件计算
进程的总Cpu 时间计算公式(该值包括其所有线程的 cpu 时间)
processCpuTime = utime + stime + cutime + cstime
=> 线程的cpu使用率:
基于 /proc/<pid>/task/<tid>/stat 文件计算
线程Cpu 时间计算公式为
threadCpuTime = utime + stime
CPU load:
load average 表示的是CPU的负载,包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。这个数字越小越好。参见https://en.wikipedia.org/wiki/Load_%28computing%29的解释:
that CPU load information based upon the CPU queue length does much better in load balancing compared to CPU utilization (CPU usage). The reason CPU queue length did better is probably because when a host is heavily loaded, its CPU utilization is likely to be close to 100% and it is unable to reflect the exact load level of the utilization. In contrast, CPU queue lengths can directly reflect the amount of load on a CPU.
如果load average值长期大于系统CPU的个数则说明CPU很繁忙,负载很高,可能会影响系统性能,导致系统卡顿响应时间长等等。
一般能够被接受的值是 load average <= CPU核数 *0.7。
cpu load 是从 /proc/loadavg 中读取的;
root@Ubuntu01:~# cat /proc/loadavg
0.00 0.00 0.00 1/272 20911
相关指令:
除了上面提及的top和uptime指令,还有这些:
1) 显示cpu信息:
root@Ubuntu01:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
root@Ubuntu01:~# cat /proc/cpuinfo
root@Ubuntu01:~# grep 'model name' /proc/cpuinfo | wc -l (获取cpu数量)
1
2) vmstat:
#vmstat 10 5 (表示10秒钟内取样5次)

其中cpu相关的内容:
us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,id表示idle time,wa表示IO waiting time,st表示steal time(在内存紧张环境下,pagein 强制对不同的页面进行的 steal 操作。虚拟服务占用的CPU时间百分比)。
Note: system中cs表示上下文切换Context Switch。
3) mpstat:

%guest:Percentage of time spent by the CPU or CPUs to run a virtual processor.
%gnice:Percentage of time spent by the CPU or CPUs to run a niced guest.
==> totalCpuTime = user + nice + system + idle + iowait + irq + softirq + steal + guest + guest_nice
在纯粹的物理机上(即其上未跑其它 guest OS ,自身也未作为 guest OS 被虚拟机调度器管理),steal/guest/guest_nice 值应该都为 0 ;除此之外,上述值就应该不为 0 .
4) sar监控CPU:
# sar -u 6 3 (表示6秒钟内取样3次)

与vmstat指令中的cpu内容相似:
%nice: 运行正常进程消耗的 CPU 时间百分比。
5) iostat监控CPU:
# iostat -c 4 2(表示4秒钟内取样2次)
与sar的内容类似:

**********************************************************************************************************
实际中可以根据这两个指标进行分析,例如cpu load很高,但cpu使用率却比较低;可能的原因是频繁的上下文切换导致耗费了大量的CPU时间,以至于用在运算的CPU时间片比较少,却有很多进程在等待运行。
《参考文档》
https://www.jianshu.com/p/9e571b2b4971
https://my.oschina.net/moooofly/blog/708079
https://www.gracecode.com/posts/2973.html
https://blog.csdn.net/tianlesoftware/article/details/6198780 (Linux 性能监控)
CPU利用率和CPU负荷(CPU usage vs CPU load)的更多相关文章
- 性能测试-cpu负载和cpu利用率
概述 做压力测试的时候,我们经常会关注两个指标,CPU利用率和CPU负载 Linux中,进程分为三种状态: 阻塞的进程blocked process 可运行的进程runnable process 正在 ...
- [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的
震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...
- CPU 利用率背后的真相,只有 1% 人知道【转】
导读:本文翻译自 Brendan Gregg 去年的一篇博客文章 “CPU Utilization is Wrong”,从标题就能想到这篇文章将会引起争议.文章一上来就说,我们“人人皆用.处处使用,每 ...
- CPU利用率与Load Average的区别?
CPU利用率,是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果CPU被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器 ...
- 震惊,用了这么多年的 CPU 利用率,其实是错的
导读:本文翻译自 Brendan Gregg 去年的一片博客文章 "CPU Utilization is Wrong",从标题就能想到这篇文章将会引起争议.文章一上来就说,我们&q ...
- 浅谈Linux下CPU利用率和CPU负载【转】
转自:https://blog.csdn.net/Alisa_xf/article/details/71430406 在Linux/Unix下,CPU利用率(CPU utilization)分为用户态 ...
- Linux如何统计进程的CPU利用率
1.0 概述 在Linux的/proc文件系统,可以看到自启动时候开始,所有CPU消耗的时间片:对于个进程,也可以看到进程消耗的时间片.这是一个累计值,可以"非阻塞"的输出.获得一 ...
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...
- [进程管理]Load和CPU利用率是如何算出来的
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/system/how_to_ca ...
随机推荐
- 关于Oracle的44951事件
最近有同事遇到某客户数据库产生大量阻塞,等待事件为:enq HW - contention,最开始采用不断杀会话的方式,效果不好,问题一直高频反复.进一步确认SQL是大量的insert,且插入的表中含 ...
- DLLHijack漏洞原理
原理 当一个可执行文件运行时,windows加载器讲课执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. 由于输入表中只包含DL ...
- java消息队列--ActiveMQ
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Vim编辑器设置及其使用
一.vim编辑器的相关配置文件 /etc/vimrc:vim编辑器的全局配置文件,针对所有用户有效 /etc/virc:vi编辑器的全局配置文件,针对所有用户有效 ~/.vimrc:vim编辑器的其他 ...
- Oracle创建表空间、表、一级用户授权
---恢复内容开始--- 1. 安装: 百度一下你就知道 2. sqlplus登录/sqlplus命令登录 在安装Oracle时,你需要记住设置的“全局数据库名”(默认为orcl) 和 口令,在以两种 ...
- A Simple Nim (SG打表找规律)
题意:有n堆石子,每次可以将其中一堆分为数量不为0的3堆,或者从其中一堆中拿走若干个,最终拿完的那个人赢. 思路:直接暴力SG状态,然后找出其中的规律,异或一下每一堆的状态就可以了. #include ...
- A Simple Chess (Lucas组合数 + 容斥)
题意:走马步,要求向右向下,不能走进禁止的点.求方案数. 思路:若是n*m比较小的话,那么可以直接DP.但是这道题目不行.不过我们仔细分析可以知道从某个点到某个点是一个组合数,但是数据太大,mod值很 ...
- 2018-2019-2 《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 <网络对抗技术>Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0. ...
- Load data local infile 实验报告
1.实验内容: 利用SQL语句“load data local infile”将“pet.txt”文本文件中的数据导入到mysql中 (pet表在数据库menagerie中) 2.实验过程及结果: ( ...
- 练手——用Python写的时间戳转换为北京时间的小工具
#北京时间需加上8小时bj = 8*3600 def time_stamp(times): #一天总秒数 nonDaySeconds = 24*3600 leapmonths = [ ...