CPU利用率100%该怎么办

news2025/1/20 17:06:51

1 节拍率

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

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

节拍率 HZ 是内核的可配选项,可以设置为100、250、1000 等。不同的系统可能设置不同数值,你可以通过查询 /boot/config 内核选项来查看它的配置值。例如,我的系统中就是1000,代表着每秒触发1000次时间中断。

$ sudo grep "CONFIG_HZ=" /boot/config-$(uname -r)
CONFIG_HZ=1000

同时,正因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问。为了方便用户空间程序,内核还提供了一个用户空间节拍率USER_HZ,它总是固定为 100,也就是1/100秒。这样,用户空间程序并不需要关心内核中 HZ 被设置成了多少,因为它看到的总是固定值USER_HZ。一般来说,该值记录在内核头文件/usr/include/asm/param.h中。

$ sudo grep 'HZ' /usr/include/asm/param.h 
#ifndef HZ
#define HZ 100

2 CPU使用率

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

Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。常用的性能查询工具中的CPU使用率就是通过这里的信息进行计算的。

$ sudo grep "^cpu" /proc/stat
cpu  211127928 655 33380145 11066886901 1142825 0 645558 0 0 0
cpu0 2612512 68 1712618 702004008 75464 0 423290 0 0 0
cpu1 4290320 32 2569654 700641068 52328 0 107432 0 0 0

第一列是CPU的编号,cpu则是所有CPU的总和,后面几列则是不同场景下CPU的累加节拍数,详细信息可以在man proc中找到/proc/stat部分进行查看。

因为USER_HZ一般都是100,所以每秒钟各个cpu中的Jiffiles会增加100,而性能工具计算的时候一般会取间隔几秒,然后计算。不然stat文件中是开机以来的总节拍数,如果直接计算,计算出来的是开机以来的平均CPU使用率。
在这里插入图片描述

3 CPU使用率过高怎么办?

通过一些常用的性能工具,如top、pidstat能很轻松的排查出CPU使用率较高的进程,但如果想知道究竟是代码中的哪个函数占用较高,需要用到GDB和perf这两个工具。

GDB(The GNU Project Debugger)​, 这个功能强大的程序调试利器在调试程序错误方面很强大。但是GDB调试程序的过程会中断程序运行,不能轻易在线上环境使用,一般要先找到出问题的大致函数后才能在线下进一步调试函数内部的问题。

而想找到出问题的大致函数,就要使用到perf工具了。perf 是 Linux 2.6.31以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。下面介绍两种常见用法。

第一种常见用法是 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下所示:

$ perf top 
Samples: 833 of event 'cpu-clock', Event count (approx.): 97742399 
Overhead Shared Object Symbol 
7.28% perf [.] 0x00000000001f78a4 
4.72% [kernel] [k] vsnprintf 
4.32% [kernel] [k] module_get_kallsym 
3.65% [kernel] [k] _raw_spin_unlock_irqrestore ...

输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)​。比如这个例子中,perf 总共采集了 833 个 CPU 时钟事件,而总事件数则为 97742399。

采样数要特别注意,如果采样数过少,那么参考价值就会大大减低。

再往下看是一个表格式样的数据,每一行包含四列,分别是:

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

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

perf record -p 370213 -g -- sleep 100  # 收集100s数据
perf report -i perf.data --stdio > perf_report.txt  # 解析生成的数据导出为文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型定级体系

前言:一直以来人们对通用人工智能(AGI)的定义始终缺乏一个具体的衡量标准,而现在OpenAI已创建了一套分级系统。 AI大模型定级 OpenAI对于其大模型的定级有一个独特的分级体系,旨在描述其人工智能系统的发展阶段以及距…

网络安全埋头干活,也要抬头看路

24年的Hvv大家干的正是热火朝天,也有的干的无可奈何,确实Hvv的核心其实是在Hvv前的准备阶段,Hvv中可能更多的是盯监控。 7月份我也出了两趟差,看了一下在Hvv项目上的小伙伴,30%的时间是在处理误报,60%的时…

51 for 循环与 while 循环

Python 主要有 for 循环和 while 循环两种形式的循环结构,多个循环可以嵌套使用,并且还经常和选择结构嵌套使用来实现复杂的业务逻辑。 while 循环一般用于循环次数难以提前确定的情况,当然也可以用于循环次数确定的情况。 for 循环一般用于…

共享`pexlinux`数据文件的网络服务

实验环境准备: 1.红帽7主机 2.要全图形安装 3.配置网络为手动,配置网络可用 4.关闭vmware DHCP功能 一、kickstart自动安装脚本制作 1.安装图形化生成kickstart自动脚本安装工具 2.启动图形制作工具 3.图形配置脚本 这里使用的共享方式是http&#xff0…

SpringBoot + Vue + ElementUI 的人力资源管理系统-附项目源码与配套文档

摘 要 在如今这个人才需求量大的时代,各方企业为了永葆企业的活力与生机,在不断开 拓进取的同时,又广泛纳用人才,为企业的长久发展奠定了基础。于是,各个企业与部 门机构,都不可避免地会接触到人力资源管理…

微信小程序之behaviors

目录 概括 Demo演示 进阶演示 1. 若具有同名的属性或方法 2. 若有同名的数据 3. 若有同名的生命周期函数 应用场景 最后 属性&方法 组件中使用 代码示例: 同名字段的覆盖和组合规则 概括 一句话总结: behaviors是用于组件间代码共享的特性, 类似一…

03 RabbitMQ:HelloWorld

03 RabbitMQ:HelloWorld 1. 目标2. 实现2.1. 新建Spring Boot 项目2.1.1. 新建生产者(producer)项目2.1.2. 新建生产者(consumer)项目 2.2. 导入依赖2.3. 代码2.3.1. 发送消息(producer)2.3.2. …

TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

导读 TiKV 是一个支持事务的分布式 Key-Value 数据库,目前已经是 CNCF 基金会的顶级项目。它通过 Raft 协议实现数据的高可用性和强一致性,是 TiDB 分布式数据库系统的重要组成部分。本文作为 TiKV 源码解读系列的增补,详细介绍了 TiKV 8.2.…

2024华数杯C题保姆级分析完整思路+代码+数据教学

2024华数杯C题保姆级分析完整思路代码数据教学 C题题目:老外游中国 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 1 总体分析: 题目要求本题目基于中国境内旅游景点数据,旨在通过数学建模解决外国游客在中国旅游时可能遇到的…

安装pytorch GPU方法

参考全网最详细的安装pytorch GPU方法,一次安装成功!!包括安装失败后的处理方法!-CSDN博客 整体来看,一共下面三个安装步骤: 显卡驱动(nvidia-smi)-》显卡深度学习驱动&#xff08…

三十种未授权访问漏洞复现 合集( 四 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

日志系统——整体框架

日志等级模块: 该模块描述了日志消息的各种等级debug,info,warn,error,fatal,off(off为最高等级,屏蔽一切日志消息),并提供描述日志等级的方法 日志消息模块: 该模块负责构建日志消息对象,此对象管理着一条日志中的各项…

【Python网络爬虫案例】python爬虫之爬取豆瓣电影信息

🔗 运行环境:PYTHON 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

【C语言】计算四则运算,中缀表达式转换为后缀表达式

C语言编程—中缀表达式转换为后缀表达式 思路: 中缀转后缀保存结果栈:stack,保存数据和-*/ 操作符栈:op_stack,保存-*/() 场景一:遇到数据,直接入栈stack 场景二:遇到"(&qu…

海康笔试题

1. 2. 块设备:磁盘设备驱动、SD设备驱动 字符设备:终端设备驱动 网络设备:网络设备驱动 (1)linux操作系统驱动程序分为三大类:字符设备驱动、快设备驱动和网络设备驱动 (2)字符设…

2024 年华数杯全国大学生数学建模竞赛C 题 老外游中国 完整思路 源代码 模型结果(仅供学习)

最近,“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了…

基于X86+FPGA助力实现电力系统的智能监测与高效管理

电力监控 信迈提供基于Intel平台、Xilinx平台、Rockchip平台、NXP平台、飞腾平台的Mini-ITX主板、Micro-ATX主板、ATX主板、嵌入式准系统/工业整机等计算机硬件。产品算力强大,支持高速存储,提供丰富串口、USB、LAN、PCIe扩展接口、显示接口等I/O接口&am…

【python】数据类型之列表类型(上)

本篇文章将讲解列表类型。 列表(list),是一个有序且可变的容器,在里面可以存放多个不同类型的元素。 列表中的元素之间用逗号(英文中的逗号)相隔。 1、定义: 例如: user_list[]…

stl容器 vector的基本操作

目录 1.vector构造 1.1默认构造函数 1.2 fill 填充构造函数 ​编辑 1.3 范围构造函数(Range Constructor) 1.4拷贝构造函数 2.initializer_list初始化vector 3.迭代器 4.常用的几个成员 4.1 size()统计当前有效字符个数 4.2 capacity ve…

青甘环线游记|day(2)|西宁、青海湖

坐动车 早上7:30醒来,在8:00左右起床,下楼吃兰州拉面。面煮的很好吃,就是还是不是很适应。看到8元的牛肉面感觉很震惊,没想到是面8元,牛肉另加,10元。 坐上动车前往西宁,12点左右到了。虽然在…