CPU使用率到100%了?

本文介绍了CPU的一些基本概念,包括CPU主频、多核、超线程技术以及大小端模式。通过实例展示了操作系统如何调度和分配CPU资源,并通过测试程序解释了单核和多核CPU的使用情况。内容适合软件开发和运维人员了解CPU工作原理。

大家好,我是乔戈里,相信很多朋友都遇到过CPU 100%的问题,这里推荐一篇不错的文章,解决CPU使用率 100%的问题!

最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器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 ··················

点击关注公众号,免费领学习资料

你好,我是涛哥,优快云排名第一。

自学计算机,毕业后就职华为腾讯。

从事软件开发,期待与你一起成长。

文 章 类 别

1.编程之路    2.面试刷题

3.职场进阶    4.杂文荟萃

   

推 荐 阅 读

所志在功名,离别何足叹

万 字 攻 略,详 解 腾 讯 面 试

出去之后,好好做人,华为两年,苦乐参半

点“赞”和“在看”哦

<think>嗯,用户问为什么CPU利用率会超过100%,这需要好好想想。首先,我得回忆一下CPU利用率的基本概念。CPU利用率通常是指CPU在某个时间段内被使用的情况,百分比表示。比如100%就是满负荷运行。那怎么会超过100%呢? 可能和操作系统统计方式有关。记得多核处理器的话,每个核心都是独立的。比如一个四核CPU,每个核心最多100%,那么四个核心总共可以达到400%。所以如果程序使用了多个核心,总利用率可能会超过100%。这时候,像top这样的工具可能会把总和显示出来,所以超过100%其实是多核的总和。 另外,可能用户看到的是某些监控工具的不同计算方式。例如,有些工具可能以单个核心的100%为基准,多核情况下自然总和超过100%。这时候用户如果看到150%,可能意味着一个半核心被完全使用。 还有一种情况是超线程技术。虽然逻辑核心数多于物理核心,但每个逻辑核心的计算能力可能不如物理核心。不过,利用率统计时可能还是按逻辑核心来算,所以总和也可能超过100%。 还有可能是时间片的累积计算。比如,在很短的时间内,CPU处理多个任务,时间片累加超过实际时间,导致百分比超过100%。不过这种情况可能更多出现在多核情况下。 需要确认用户是否了解多核CPU的概念。可能用户看到top命令显示超过100%感到困惑,这时候需要解释多核的累加效果。或者用户在使用某个监控软件,默认显示的是所有核心的总和,所以超过100%是正常的。 还要考虑不同的操作系统和工具的不同显示方式。比如Linux的top命令可以按1查看每个核心的使用情况,而默认可能是总和。而Windows的任务管理器可能以单个核心为100%,所以多核的话最大利用率会是100%乘以核心数,但显示时可能不会超过100%,除非使用其他工具。 可能用户遇到的具体情况是某个进程占用了多个核心,导致总利用率超过100%。这时候需要说明多核处理器的工作原理,以及如何正确解读监控数据。 总结一下,超过100%的主要原因是多核CPU的总使用率被累加显示。每个核心独立计算,所以四核的话400%是上限。因此,当工具显示超过100%时,实际上是在反映多核的综合使用情况。需要根据具体的工具和操作系统来解释,并提醒用户查看每个核心的使用情况或工具的计算方式。</think>CPU 利用率超过 100% 的现象通常与**多核处理器**和**统计方式**有关。以下是具体原因和解释: --- ### 1. **多核 CPU 的累加统计** - **核心独立性**:现代 CPU 多为多核(如 4 核、8 核等),每个核心的利用率独立计算(单核最高 100%)。 - **总利用率计算**: 例如,一个 4 核 CPU 的总利用率理论上可达 `4×100% = 400%`。若工具(如 `top`、`htop`)将多核数据**累加显示**,数值可能超过 100%。 ``` 示例:若 4 核 CPU 中,2 个核心满载(2×100%),1 个核心半载(50%),则总利用率为 250%。 ``` --- ### 2. **监控工具的计算方式** - **单核基准**:部分工具以单核 100% 为基准。例如,4 核 CPU100% 利用率实际代表单核满载,其他核心空闲。 - **多核显示差异**: - **Linux `top` 命令**:默认显示多核累加值(可能超过 100%),按 `1` 可查看单核详情。 - **Windows 任务管理器**:以单核为基准,总利用率最高显示 100%(多核的“平均利用率”)。 --- ### 3. **超线程(Hyper-Threading)的影响** - 超线程技术将一个物理核心模拟为多个逻辑核心(如 4 核变 8 线程)。逻辑核心的利用率可能被单独统计,导致总数值超过物理核心的 100%。 --- ### 4. **并行任务与多线程程序** - 多线程程序(如科学计算、视频渲染)可同时占用多个核心,导致总利用率飙升。例如: - 一个 8 核 CPU 运行并行任务时,利用率可能显示 800%。 --- ### 如何正确理解? - **查看单核利用率**:通过工具(如 `top` 按 `1`)检查每个核心的负载。 - **区分“总利用率”与“单核满载”**:超过 100% 仅表示多核综合使用率,不代表单核过载。 - **实际性能瓶颈**:即使总利用率高,若单核未满载,程序可能仍受限于单线程性能。 --- ### 总结 CPU 利用率超过 100% **本质是多核累加统计的结果**,反映的是所有核心的综合负载,而非单核异常。理解这一点对分析系统性能(如并行计算效率、多任务处理能力)至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值