CPU使用率100%,如何解决
文章目录
- 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 总共采集了 833 个 CPU 时钟事件,总事件数则为 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%,如何解决相关推荐
- 记录一次生产CPU使用率100%问题排查
问题背景 四月中旬生产环境的服务器频繁爆出cpu使用率100%的警告,起初这个业务线不是我负责,也就没有深入了解问题.后边,负责这个业务线的同事离职了,这件事就落在我这边了.然后,开始长达两个月的问题 ...
- 转:网御星云防火墙CPU使用率100%的解决方案
网御星云防火墙CPU使用率100%的解决方案 2018年03月01日 21:46:06 范一刀 阅读数 1482 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文 ...
- 网御星云防火墙CPU使用率100%的解决方案
网御星云防火墙CPU使用率100%解决方案 前几天收到河南某地方性银行出现的故障:网御星云防火墙CPU使用率一直处于100%的状态, 于是前去现场检查设备 发现 1.该防火墙策略做的并不多: 2.该防 ...
- php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法
早上帮朋友一台服务器解决了 Mysql cpu 占用 100% 的问题.稍整理了一下,将经验记录在这篇文章里. 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 My ...
- linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...
本文在介绍如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获. 排查 Linux 实例异常 CPU 使用率 100% 使 ...
- linux内核3.6版本及以下的bug引发的故障--cpu使用率100%
现象: 旗舰店运价库cpu使用率100%,load升高,导致后续的请求失败. 重启服务器,cpu.load恢复正常. 触发条件: (1)linux内 ...
- Linux生产环境CPU使用率100%,教你定位到具体函数
在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率,发现监控报了60%的一般就会报警了,到了100%那就惨啦,做我开发的 ...
- mysql的cpu使用率突然增高_mysql cpu使用率过高解决方法
mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...
- vm15我的计算机大型延迟太高,VMware虚拟机cpu使用率高怎么解决
VMware虚拟机cpu使用率高怎么解决 问题现象:最近发现主机CPU使用情况很高,虚拟机CPU使用情况超过90%,且CPU就绪值超过20% .这种情况怎么处理? 原因分析:很可能是由于主机缺少满足要 ...
- 再谈CPU使用率100%的问题
曾经我很讨厌那些运维一见到CPU使用率100%的时候就大叫狂跳的样子,我还曾经说过,如果CPU不是拿来用的,难道是用来闲置的吗. 好像我说的话挺有道理.但是,我错了- 不过这也并不意味着运维是 ...
最新文章
- Python 爬虫使用pyppeteer 网页进行向下翻页操作
- 解决SecureCRT连接GNS3时SecureCRT标签窗口同名的问题
- 014_哈希表内建函数
- 在RHEL 6.5上安装grid报错libcap.so.1
- python训练手势分类器_使用Pytorch训练分类器详解(附python演练)
- vue-cli生成项目时你应当知道的
- (转载) Java线程池原理
- 2021-06-10 JUC01DAY
- 【微软商店(Microsoft Store)重置后打不开,商店下载不了应用的解决方法】
- Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning(TKDE2020)
- 设计模式学习之组合模式
- Linux和windows导入scv数据文件
- android app内动态获取apk签名md5,与keytool获取的一致
- pythondocx_python docx文档转html页面
- 技术分享 | OceanBase 手滑误删了数据文件怎么办
- 【原创】2009年太白山穿越
- linux系统使用ps,Linux系统ps命令使用教程
- c语言子函数返回字符串的正确方式
- Eclipse折叠代码插件folding 推荐
- INA226使用之程序与模块测试