CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示。

CPU 使用率

为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机一来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。
Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。

第一列是 CPU 编号,其他列则表示不同场景下 CPU 的累加节拍数。

诸如 top、ps 之类的性能工具展示的 %user、%nice、%system、%iowait、%steal 等等,它们都代表什么意思呢?

  • user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
  • nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
  • system(通常缩写为 sy),代表内核态 CPU 时间。
  • idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
  • irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
  • softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
  • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
  • guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
  • guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

而我们通常所说的 CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,用公式表示就是:
CPU 使用率 = 1 - 空闲时间 / 总 CPU 时间

如果直接用 /proc/stat 的数据计算 CPU 使用率,它记录的是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般参考价值不大。事实上,为了计算 CPU 使用率,性能工具一般都会取间隔一段时间,比如 3 秒,的两次值,作差后,再计算出这段时间内的平均 CPU 使用率。

不同的工具设置的间隔时间可能不同,比如 top 默认使用 3 秒时间间隔,而 ps 使用的是进程的整个生命周期。

怎么查看 CPU 使用率

top 或者 pidstat 这类的工具。pidstat 可以详细查看进程的用户态 CPU 和内核态 CPU。

  • %usr:用户态 CPU 使用率
  • %system:内核态 CPU 使用率
  • %guest:运行虚拟机 CPU 使用率
  • %cpu:总的 CPU 使用率
  • CPU:CPU 编号


top 第三行 %CPU 就是系统的 CPU 使用率,含义上面说过。top 默认显示的是所有 CPU 的平均值,按下数字 1,就可以切换到每个 CPU 的使用率了。
每个进程的 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率之和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU、以及在就绪队列等待运行的 CPU。

CPU 使用率过高怎么办?

通过 top、ps、pidstat 等工具,能够轻松找到 CPU 使用率过高的进程。接下来就要分析 占用 CPU 的到底是代码里的哪个函数呢?找到后才能更高效、更针对性地进行优化。

GDB 并不适合在性能分析的早期应用,GDB 调试程序的过程会中断程序运行,这在线上环境往往是不允许的,所以 GDB 只适合在性能分析的后期,当你找到了出问题的大致函数后,线下再借助它来进一步调试函数内部的问题。

最推荐的工具是 perf。perf 是 Linux 2.6.31 以后内置的性能分析工具,它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。两种常见用法:
第一种是 perf top,类似 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下:

第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,peft 总共采集了 747 个 CPU 时钟事件,而总事件数为 174906250。采样数如果过少,那下面的排序和百分比就没什么实际参考价值了。

  • Overhead,是该符号的性能事件在所有采样中的比例,用百分比来表示。
  • Shared,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
  • Object,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
  • Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

第二种常见用法是,perf recordperf reportperf top 实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后序分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 peft report 解析展示。

对进程进行跟踪分析其调用:
perf top -g -p <pid>

小结

CPU 使用率是最直观和最常用的系统性能指标,更是我们在排查系统性能问题时,通常会关注的第一个指标。所以我们更要熟悉它的含义,尤其要弄清楚用户(%usr)、Nice(%ni)、系统(%sy)、等待I/O(%wa)、中断(hi)以及软中断(si)这几种不同 CPU 的使用率。比如说:

  • 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
  • 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
  • I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
  • 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。

碰到 CPU 使用率升高的问题,可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数。

Linux 系统 CPU 使用率简单分析相关推荐

  1. linux 使cpu使用率升高_关于linux系统CPU篇---gt;CPU使用率升高

    1.CPU使用率为单位时间内CPU使用情况的统计,以百分比的方式展示. LINUX作为一个多任务操作系统,将每个CPU的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运 ...

  2. LInux系统木马植入排查分析 及 应用漏洞修复配置(隐藏bannner版本等)

    在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节.今天,分享一下如何检查linux系统是否遭受了入侵? 一.是否入侵检查 1)检查系统日志 检查系统错误登陆日志,统计IP重试 ...

  3. linux cpu平均负载,关于linux系统CPU篇---平均负载

    1.什么是平均负载?(load average) 平均负载是指单位时间内平均活跃进程数,包括可运行状态的进程数,以及不可中断状态的进程(如等待IO,等待硬件设备响应) 2.如何查看平均负载? 使用to ...

  4. linux物理内存地址与iomem,一种Linux系统物理内存镜像文件分析方法_4

    模块信息,如图7所示,给出了本发明的实施例中 模块结构关系图,modules变量指向某一个已加载模块结构体module地址,所有已加载模 块其module形成一个双向链表,如图7所示,据此可以获取到所 ...

  5. Linux系统CPU相关信息查询

    Linux系统CPU相关信息查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lscpu常用参数介绍 1>.查看帮助信息 [root@node105 ~]# lscpu ...

  6. Linux查看CPU使用率、内存使用率等

    一.CPU使用率查看 1. cat /proc/loadavg命令 $ cat /proc/loadavg 0.08 0.06 0.10 1/442 8347 前三项分别是最近1分钟.5分钟和15分钟 ...

  7. Linux:CPU使用率是如何计算的?怎么查看CPU使用率?

    CPU 使用率是最常用来描述系统CPU 性能的指标. CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方式展示.那么 **CPU 使用率到底是怎么算出来的吗?再有 %user.%nice ...

  8. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1, #cat /proc/stat/  信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2, #vmstat –s   或者 #vmstat    虚拟内存统 ...

  9. 一款好用的Linux系统服务器性能监控分析工具介绍

    软件性能测试过程中经常要对服务器性能指标(比如CPU.内存.磁盘IO及网络IO等等)进行监控以分析出软件在此服务器上的性能瓶颈以便进行后续的服务器调优及软件性能优化.下面为大家介绍一款小编认为比较好用 ...

最新文章

  1. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)
  2. JSP数据交互(二)
  3. 前端面试知识点目录整理
  4. 操作系统中的多级队列调度
  5. 如何选择国外虚拟主机空间服务商
  6. git原理详解与实操指南_基于dockercompose的Gitlab CI/CD实践amp;排坑指南
  7. 亚马逊表示并未放弃WP平台:正在打造新应用
  8. [JavaScript] 怎么使用JS禁止复制粘贴
  9. 微信公众号开放标签跳转小程序
  10. align latex 使用_LaTeX系列笔记(9)-数学模式下的间距及align等环境的实现
  11. android小米4c 权限,小米4C root教程_小米4C卡刷获取root权限的方法
  12. Aspose.word基础
  13. cuda 和 pytorch版本不一致torch.cuda.is_available()返回false——解决办法
  14. SysML实践指南第二版(中文翻译:刘亚龙)第16章 蒸馏器案例
  15. 计算机键盘重复,电脑怎么设置键盘重复延迟和重复速度?
  16. 现代信息技术的特点和趋势
  17. 网络流量 pv、uv、ip 各代表的含义
  18. 单例模式( Single Pattern ): 不仅仅是回字的四种写法
  19. 把踢毽子的寒冷过程和心理描写出来
  20. html做成绩查询,一个简单的成绩查询系统

热门文章

  1. FT_Summ_Default_Language
  2. linux 云计算 python 数据库的分类 架构设计
  3. 数据和安全①加解密理论概述
  4. 启用tim无法访问文件夹_如何在三星手机上启用安全文件夹
  5. 2022年8月商汤先锋AI部门C++题目
  6. 使用掩码限制QLineEdit的输入
  7. 美丽的紫荆花如何用CAD这个软件做出来?
  8. “肮脏的”IT工作排行榜
  9. 广州大学招聘会总结(IT岗位)
  10. HTML table表单colspan和rowspan行列使用方法