CPU使用率100%,如何解决

article/2025/10/8 6:21:34

文章目录

    • 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,所以应该着重排查内核中的中断服务程序。


http://chatgpt.dhexx.cn/article/kYkAT46h.shtml

相关文章

解决 服务器cpu使用率100%,变成矿鸡之我与病毒crypto斗智斗勇,宝塔面板cpu使用率100%爆红

关于 简单解决宝塔面板显示CPU使用率 100%,但top却没找到相关进程这件事!!! 如图: 作为一个小白,我只是想简单的搭建一个个人网站,结果碰到这个闹心的事。 服务器: 阿里云服务器 面板&#xff…

linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化

今天使用 MobaXterml 连接上一台物联网的Linux服务器的使用,发现该服务器的CPU使用率一直在100%左右。 使用top 命令发现Mysql占用了大量的CPU 用数据库工具 Navicat premium 以 root 的身份连接数据库,执行查询语句: show PROCESSLIST; 发现…

CPU使用率到100%,有哪些因素影响?

关注星标公众号,不错过精彩内容 转自 | 涛哥依旧 最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。 我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果…

记一次golang cpu 占用100%

最近重新部署了下测试服务器,发现其负载达到了4.*, cpu 使用率达到了100%,吓的瑟瑟发抖,马上起来查看情况。 1, 想到了使用go性能查看工具: pprof,因为项目是用gin开发的,所在直接安…

Mysql CPU占用100%查询

这几天每天都会收到服务器负载报警,抽出时间查看一下原因。 进入到服务器使用top命令查看: 能够看到是mysql常年霸居榜首,导致服务器负载变高。理论上来讲,数据量没有那么大,因为很多数据都是没用的,前一段…

【故障排查】如何排查CPU占用100%

线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令,找到占用CPU最高的进程。按ShiftP键排序: 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

vmware虚拟机WinXp sp3的系统cpu占用100%的解决方案

0x00 问题场景 1. 环境配置 角色版本位数备注虚拟机软件VMware Workstation15\原始版本12,升到15Host OSWindows 7 Professional6.1.7601, Service Pack 164-bit\Guest OSWindows XPservice Pack 332 bit\ 2. 环境说明 VMware在很久以前是version12,…

Win10环境VMware开WinXP虚拟机CPU占用100%

解决办法 网上试了各种方法,还是不太行,最后莫名其妙的好了。而这之前我只做了一件事,在windows的功能里打开hyper-V服务。 后续 某一天,windows系统自动更新了,然后本来运行得好好的win xp虚拟机变得巨卡。我在w…

IDEACPU占用100%_卡顿 解决办法

解决IDEA占用CPU100%的问题 直接上答案为什么会占用CPU如何查找占用CPU的原因 直接上答案 绝大部分的原因是你打开了一个有非常非常多的代码的类,并且你并不编辑这个类,你只是打开了。。。 当然,如果不是这样,你才能去排查是不是…

linux的cpu使用率100%?

1:背景 在linux环境中,我们都会通过top指令获取当前实例的进场占用cpu情况,如下所示 [123456789root ~]$ top top - 11:48:13 up 622 days, 15:51, 2 users, load average: 0.22, 0.19, 0.11 Tasks: 788 total, 1 running, 787 sleepin…

【最实用实战】如何排查CPU占用100%

线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令,找到占用CPU最高的进程。按ShiftP键排序: 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

虚拟机CPU占用100%问题记录

项目场景 kswapd0占用CPU过高,严重影响服务器及虚拟机的使用。 原因分析 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。 系统物理内存不足时,kswapd0 会频繁的进行换页操作(使用swap分区与内存换页操作交换数据)&…

linux cpu占用100%排查

步骤一、找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表键入P (大写p),进程按照CPU使用率排序图示: 线上服务CPU100%问题快速定位实战 如上图,最耗CPU的进程PID为10765 步骤二&…

揭秘win10系统CPU占用100%的真正原因/找出那些罪魁祸首

经常会有 Win10 用户反应,电脑没有运行太多程序,但是在任务管理器中,经常可以看到电脑CPU占用率却一直居高不下。那么,CPU占用100%的正真原因是什么呢?下面小编收集了一些针对CPU占用过高的原因及解决办法&#xff0…

CPU占用100%的原因及解决办法

电脑关机故障速解 经常出现cPU占用100%的情况,主要问题可能发生在下面的某些方面: cPU占用率高的九种可能 1、防杀毒软件造成故障 由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理…

前端请求SDK_前端埋点:质量指标验证

背景 随着万物互联、线上线下结合,终端触达的面越来越广,数据采集应该是企业数据团队最基础和重要的工作之一。做数据的同学应该深有体会,收集的数据内容是否全面、准确、实时,直接影响到数据处理和计算的成本、分析和应用的准确。…

前端埋点方案研究及在Android项目中的实践

前言 数据埋点的质量直接关系到前端监控、数据分析结果的准确性,对应用的用户行为分析、数据分析决策、数据化运营、错误分析来说都是基础的存在,在前端监控与数据分析中是第一个重要的步骤。中本文聚焦于目前主流埋点方案的探究,以及其在An…

前端监控和前端埋点方案设计

在线上项目中,需要统计产品中用户行为和使用情况,从而可以从用户和产品的角度去了解用户群体,从而升级和迭代产品,使其更加贴近用户。用户行为数据可以通过前端数据监控的方式获得,除此之外,前端还需要实现性能监控和异…

903前端埋点 springboot

显示用户偏好效果 ajax代码效果 accessrandomfile 创建springboot工程 spring:datasource:driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:192.168.100.151:1521:orclusername: cmpassword: okmybatis:mapper-locations: classpath*:mapper/*.xmlty…

前端埋点学习笔记

目的 埋点是为了采集用户行为数据(例如页面访问路径,点击了什么元素),便于进行数据分析。 三大类型 现有的埋点采集方案可以大致被分为三种 手动埋点 需要调用埋点的业务方在需要采集数据的地方调用埋点的方法,可以…