文章目录

  • CPU使用率
    • 概念
    • CPU使用率的重要指标
    • 计算公式
  • 查看CPU使用率
  • CPU 使用率过高
  • 总结

CPU使用率

概念

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

Linux是一个多任务操作系统,将每个CPU的时间划分为很短的时间片,通过调度器轮流分配给各个任务使用,因此会造成多任务同时运行的错觉。

为了维护CPU时间,Linux会通过实现定义节拍率(内核中表示为HZ)触发时间中断,使用全局变量Jiffies记录开机以来的节拍数。每一次时间中断,Jiffies值加1。

节拍率HA是内核的可配选项,可以设置为100、250、1000等,不同系统可能设置不同的数值,代表每秒钟触发了多少次时间中断。

因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问。为了方便用户空间程序,内核还提供了一个用户空间节拍率 USER_HZ,它总是固定为 100,也就是 1/100 秒。

Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息 ,只关注CPU可以执行下面命令:

//todo  实际操作一下看下
$ cat /proc/stat | grep ^cpu
cpu  280580 7407 286084 172900810 83602 0 583 0 0 0
cpu0 144745 4181 176701 86423902 52076 0 301 0 0 0
cpu1 135834 3226 109383 86476907 31525 0 282 0 0 0
  • 第一列表示的是 CPU 编号,如 cpu0、cpu1
  • 其他列则表示不同场景下 CPU 的累加节拍数,它的单位是 USER_HZ,也就是 10 ms(1/100 秒),所以这其实就是不同场景下的 CPU 时间。
  • 第一行没有编号的 cpu ,表示的是所有 CPU 的累加。

CPU使用率的重要指标

  • user(us) : 用户态CPU时间,不包括nice时间,包含guest时间
  • nice(ni) : 低优先级用户态CPU时间,进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
  • system(sys) : 内核态CPU时间
  • idle(id) : 空闲时间,不包括等待IO的时间(iowait)
  • iowait(wa) : 等待IO的CPU时间
  • irp(hi) : 处理硬中断的 CPU 时间
  • softirq(si) : 处理软中断的 CPU 时间
  • steal(st) : 系统运行在虚拟机中时,被其他虚拟机占用CPU的时间
  • guest(guest) : 通过虚拟化运行其他操作系统的时间,运行虚拟机的CPU时间
  • guest-nice(gnice) : 以低优先级运行虚拟机的时间

计算公式

CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比

用 /proc/stat 计算出来的是开机以来平均使用率,没有参考价值,一般计算方式如下:
性能工具一般都会取间隔一段时间(比如 3 秒)的两次值,作差后,再计算出这段时间内的平均 CPU 使用率,即

Linux 也给每个进程提供了运行情况的统计信息,也就是 /proc/[pid]/stat

要查看 CPU 使用率,不需要先读取 /proc/stat 和 /proc/[pid]/stat和信息计算,直接使用性能工具就好,但是需要注意不同工具的时间间隔。

top 和 ps 这两个工具报告的 CPU 使用率,默认的结果很可能不一样,因为 top 默认使用 3 秒时间间隔,而 ps 使用的却是进程的整个生命周期。

查看CPU使用率

  • top 显示了系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。
  • ps 则只显示了每个进程的资源使用情况

top 并没有细分进程的用户态 CPU 和内核态 CPU,但pidstat命令工具可以

pidstat 命令,间隔 1 秒展示了进程的 5 组 CPU 使用率,可以区分用户态和内核态

  • 用户态 CPU 使用率 (%usr);
  • 内核态 CPU 使用率(%system);
  • 运行虚拟机 CPU 使用率(%guest);
  • 等待 CPU 使用率(%wait);
  • 总的 CPU 使用率(%CPU)。

CPU 使用率过高

使用perf工具进行性能分析

//-g 开启调用关系的采 样
perf top -g

  • Samples:采样数
  • event:事件类型
  • Event count:事件总数量

perf 总共采集了 833CPU 时钟事件,总事件数则为 97742399

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

perf top 实时展示系统的性能信息,缺点是并不保存数据,无法用于离线或者后续的分析,所以perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。

总结

  • 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。

  • 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。

  • I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。

  • 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。

CPU使用率100%,如何解决相关推荐

  1. 记录一次生产CPU使用率100%问题排查

    问题背景 四月中旬生产环境的服务器频繁爆出cpu使用率100%的警告,起初这个业务线不是我负责,也就没有深入了解问题.后边,负责这个业务线的同事离职了,这件事就落在我这边了.然后,开始长达两个月的问题 ...

  2. 转:网御星云防火墙CPU使用率100%的解决方案

    网御星云防火墙CPU使用率100%的解决方案 2018年03月01日 21:46:06 范一刀 阅读数 1482 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文 ...

  3. 网御星云防火墙CPU使用率100%的解决方案

    网御星云防火墙CPU使用率100%解决方案 前几天收到河南某地方性银行出现的故障:网御星云防火墙CPU使用率一直处于100%的状态, 于是前去现场检查设备 发现 1.该防火墙策略做的并不多: 2.该防 ...

  4. php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法

    早上帮朋友一台服务器解决了 Mysql cpu 占用 100% 的问题.稍整理了一下,将经验记录在这篇文章里. 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 My ...

  5. linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...

    本文在介绍如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获. 排查 Linux 实例异常 CPU 使用率 100% 使 ...

  6. linux内核3.6版本及以下的bug引发的故障--cpu使用率100%

    现象:          旗舰店运价库cpu使用率100%,load升高,导致后续的请求失败.          重启服务器,cpu.load恢复正常. 触发条件:         (1)linux内 ...

  7. Linux生产环境CPU使用率100%,教你定位到具体函数

    在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率,发现监控报了60%的一般就会报警了,到了100%那就惨啦,做我开发的 ...

  8. mysql的cpu使用率突然增高_mysql cpu使用率过高解决方法

    mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...

  9. vm15我的计算机大型延迟太高,VMware虚拟机cpu使用率高怎么解决

    VMware虚拟机cpu使用率高怎么解决 问题现象:最近发现主机CPU使用情况很高,虚拟机CPU使用情况超过90%,且CPU就绪值超过20% .这种情况怎么处理? 原因分析:很可能是由于主机缺少满足要 ...

  10. 再谈CPU使用率100%的问题

    曾经我很讨厌那些运维一见到CPU使用率100%的时候就大叫狂跳的样子,我还曾经说过,如果CPU不是拿来用的,难道是用来闲置的吗.   好像我说的话挺有道理.但是,我错了-   不过这也并不意味着运维是 ...

最新文章

  1. Python 爬虫使用pyppeteer 网页进行向下翻页操作
  2. 解决SecureCRT连接GNS3时SecureCRT标签窗口同名的问题
  3. 014_哈希表内建函数
  4. 在RHEL 6.5上安装grid报错libcap.so.1
  5. python训练手势分类器_使用Pytorch训练分类器详解(附python演练)
  6. vue-cli生成项目时你应当知道的
  7. (转载) Java线程池原理
  8. 2021-06-10 JUC01DAY
  9. 【微软商店(Microsoft Store)重置后打不开,商店下载不了应用的解决方法】
  10. Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning(TKDE2020)
  11. 设计模式学习之组合模式
  12. Linux和windows导入scv数据文件
  13. android app内动态获取apk签名md5,与keytool获取的一致
  14. pythondocx_python docx文档转html页面
  15. 技术分享 | OceanBase 手滑误删了数据文件怎么办
  16. 【原创】2009年太白山穿越
  17. linux系统使用ps,Linux系统ps命令使用教程
  18. c语言子函数返回字符串的正确方式
  19. Eclipse折叠代码插件folding 推荐
  20. INA226使用之程序与模块测试

热门文章

  1. SpringBoot+VUE项目启动方式
  2. 计算机操作系统-2-处理器管理
  3. 煮酒论AI,看看大牛怎么说
  4. 小波变换(matlab)-常见脚本函数
  5. switch怎么用字符c语言,switch怎么用c语言-switch用c语言讲解
  6. 时间序列分析中的增长率——同比与环比
  7. Matlab中grid 的使用
  8. html中电脑自动输入,电脑一直自动打字怎么办
  9. 32位电脑和64位电脑
  10. NOI2014--起床困难症