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

article/2025/10/8 6:23:23

关注+星标公众,不错过精彩内容

转自 | 涛哥依旧

最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。

我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果虚惊一场。

这位同事看到的100%,并非指整个CPU使用率到了100%,而是指CPU某些核的使用率到了100%.

趁此机会,我来聊聊与CPU相关的概念,对很多软件开发和运维人员来说,这些概念是必须要掌握的:

  • CPU主频

  • 多个CPU

  • 多核CPU

  • 逻辑核(超线程)

  • 大小端

以一款CPU为例,看下具体参数:

      

CPU主频(时钟频率) 

在上面这些参数中,人们最熟知的是CPU主频(时钟频率)。买电脑时,肯定需要看CPU主频是多少。

我们知道:CPU时钟越快,产生上升沿/下降沿的速度就越快,就能更快地迫使其它器件做相应工作。

CPU的时钟,就像龙舟比赛的击鼓人,击鼓频率越快,就迫使划船的人跟上节奏,结果龙舟也越快。

从CPU参数可以看到,该CPU有12个物理核,每个物理核对应2个逻辑核(超线程技术)。所以,从外部看,该CPU有24个核(逻辑核)。

也就是说,该CPU有12个物理上的运算器&控制器,有24个逻辑上的运算器&控制器。

多个CPU

我们看linux命令lscpu给出的信息:

Socket(s):             2

可以看到,在这台服务器上,总共插了2个CPU,  这2个CPU是物理上的CPU, 人眼可以看到,手也可以触摸到:

多核CPU

我们看linux命令lscpu给出的信息:

Core(s) per socket:    12

可以看到,针对每一个物理CPU而言,内部有12个物理核。也就是说,在一个物理CPU内,有12个物理层面的运算器&控制器,它们是实实在在存在的。

很霸气的感觉,12个物理核如下图所示:

逻辑核(超线程)

我们看linux命令lscpu给出的信息:

Thread(s) per core:    2

由于Intel采用了超线程技术,所以每个物理核对应2个逻辑核:

要注意,在物理上看来,只有一个核,但采用了超线程技术,在使用时,实际效果是2个核在同时并行(不是同步并发)工作,也即有2个逻辑核,如下图所示:


那么,在上面这台服务器中,有多少个逻辑核呢?

服务器中插有2个物理CPU, 每个物理CPU有12个物理核,每个物理核有2个逻辑核,故总共48个逻辑核。

因此,当操作系统俯视CPU硬件时,它看到的是,在计算机中,有48个核,即有48个运算器&控制器。

对于操作系统而言,它可以认为有48个CPU核在同时并行(不是同步并发)为它提供服务,lscpu查出的信息如下:

CPU(s):                48

这里的48个CPU(s), 其实就是48个逻辑核。有时,我们也可以说,这台服务器有48个核。

这台服务器有2个CPU, 针对其中一个CPU,我们也可以说,它是"12核24线程"。

操作系统对核的分配 

需要注意的是,如上的服务器有2个CPU,  每个CPU有12物理核,每个物理核有2个逻辑核,这仅仅是针对特定服务器和CPU的。

其他计算机或者CPU, 就不一定如此了。来看我的另外一台服务器,配置略微寒酸:总共只有1个CPU, 1个物理核,1个逻辑核:

ubuntu@VM-0-15-ubuntu:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-26xx v4
Stepping:              1CPU MHz:               2394.446
BogoMIPS:              4788.89
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch bmi1 avx2 bmi2 rdseed adx xsaveopt
ubuntu@VM-0-15-ubuntu:~$

如果在这个单核服务器上,运行如下的死循环程序,会如何呢?

#include <stdio.h>int main(){  while(1);  // 死循环  return 0;}

 

观察top命令给出的结果,可以看到,1个进程就消耗了大约99.0%的CPU,整个CPU的使用率达到99.7%:

        

那么,如果开启2个进程并发执行呢?可以看到,每个进程几乎都是占用49.x%的CPU,整个CPU的使用率达到99.7%:

那么,如果开启3个进程并发执行呢?可以看到,每个进程几乎都是占用32.x%的CPU,整个CPU的使用率达到98.7%:

可以看到,整个CPU几乎被瓜分殆尽。这种调度和分配,是由操作系统完成的。

再来看多核CPU的情况,我找了另一台服务器,有32个逻辑核,简称32个核。运行一下死循环进程,用top命令来分析。

可以看到,1个进程占满1个核,使用率100%, 而服务器32个核的使用率是3.6%:

运行2个进程,可以看到,2个进程都占用99.7%的核,而服务器32个核的使用率是6.5%:

运行3个进程,可以看到,3个进程都占用100%的核,而服务器32个核的使用率是9.8%:

看到使用率为100%时,不要紧张,不要以为CPU就用完了,这台服务器有32个核呢(拥有3200%的能力)。

来看下3个进程时,每个核的具体使用情况(3个进程,总共大概占用300%的核):

这些值会动态地变化,而且不一定是消耗在某些固定的核上。核的调度和资源分配,由操作系统来完成:

CPU大小端

最后,来看一个大小端的问题,看lscpu命令的信息:

Byte Order:            Little Endian

它的含义是: CPU是小端模式。相信几乎所有的程序员都听说过这个概念,我们具体来测试一下。

下面是在Intel CPU + Windows + VC++6.0上的测试结果,可以看到:低位的0x78存储在地址较小的位置(端模式):

下面是对8051单片机进行的仿真测试,可以看到:高位的0x12存储在地址较小的位置(大端模式):

至此为止,我们对CPU的基本参数有了大致了解,这也是linux相关的开发、运维人员必须掌握的。

以后也可以谈笑风生地聊多个CPU、多核CPU、逻辑核和大小端了,而不是一如既往地一知半解。

------------ END ------------

后台回复『科普知识』『Linux』相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。


http://chatgpt.dhexx.cn/article/7qLDX1KY.shtml

相关文章

记一次golang cpu 占用100%

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

Mysql CPU占用100%查询

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

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

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

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

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

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

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

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

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

linux的cpu使用率100%?

1&#xff1a;背景 在linux环境中&#xff0c;我们都会通过top指令获取当前实例的进场占用cpu情况&#xff0c;如下所示 [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%&#xff0c;CPU占用过高&#xff0c;本文介绍一下如何排查CPU占用过高原因。 步骤1. top 输入top命令&#xff0c;找到占用CPU最高的进程。按ShiftP键排序&#xff1a; 可以看到CPU占用最高的pid是92129。 步骤2. top -Hp pid 查看指定进程内线程信…

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

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

linux cpu占用100%排查

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

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

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

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

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

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

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

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

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

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

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

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…

前端埋点学习笔记

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

浅谈前端埋点监控

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 加我微信lxchuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外&…

【埋点】前端埋点打点库数据统计库

前端埋点sdk 前言埋点包括在IOS、Android、H5、小程序等前端埋点&#xff0c;也包括后端业务埋点。这里仅仅讲讲这些年和产品经理、运营撕逼上百个回合的前端埋点内容。 一、buried-point-sdk是什么&#xff1f;二、使用和例子1.如何使用(一)、第一种:umd方式(1)、引入文件(2)、…

web前端埋点及数据上报

web前端埋点及数据上报 简介 前端埋点即在产品客户端获取用户行为和使用情况的一种监控方式。通过埋点可以获取到用户行为数据&#xff0c;借助这些数据&#xff0c;我们可以从用户角度出发&#xff0c;升级迭代产品&#xff0c;使其更加贴近用户使用习惯&#xff0c;提升产品…