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 ------------

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

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

欢迎关注我的视频号:

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
服务器硬件性能全文共23页,当前为第1页。 服务器硬件性能 CPU 内存 硬盘 网卡 服务器硬件性能全文共23页,当前为第2页。 CPU性能 节能模式 NUMA CPU利用率计算 服务器硬件性能全文共23页,当前为第3页。 CPU节能模式 好处:在CPU使用率不高时,自动降频,可以省电;在CPU使用率升高时,升频。 风险:频率变化时,对性能有影响,特别是计算型的服务。具体影响需要做AB测试。 服务器硬件性能全文共23页,当前为第4页。 CPU降频例子 服务器硬件性能全文共23页,当前为第5页。 NUMA NUMA, Non-uniform memory access,非一致性内存访问 SMP (Symmetric Multi-processor) NUMA NUMA解决了随着core的增加,总线资源竞争导致系统瓶颈的问题. 服务器硬件性能全文共23页,当前为第6页。 NUMA风险 1. fast比slow快3倍,所以Linux内核默认使用CPU亲和的内存分配策略,CPU0上线程的内存数据大部分在MemoryA上 2. 有可能出现MemoryA上内存不足,写入swap导致性能下降;其他CPU上的内存空闲的情况 服务器硬件性能全文共23页,当前为第7页。 CPU利用率计算 - /proc/stat文件 总cup利用率 = 1 – (采样点间的idle总时间差/采样点间的cpu总时间差) system利用率 = (采样点间的system时间差/采样点间的cpu总时间差) iowait利用率 = (采样点间的iowait时间差/采样点间的cpu总时间差) 服务器硬件性能全文共23页,当前为第8页。 内存 不同型号内存的差异 free命令的计算方法 服务器硬件性能全文共23页,当前为第9页。 不同型号内存的差异 sysbench memory --memory-block-size=8k --memory-total-size=16G run DDR4, 2666 MHz: 9072 MiB/sec DDR4, 2400 MHz: 8301 MiB/sec 虚拟机, 7298 MiB/sec 服务器硬件性能全文共23页,当前为第10页。 服务器硬件性能全文共23页,当前为第11页。 /proc/meminfo文件 available表示不考虑swap的空间,启动一个新的程序时,有多少内存可以使用。 这个字段的值不是free+buff/cache了,而是统计出系统中可以reclaimed的内存。 服务器硬件性能全文共23页,当前为第12页。 I/O性能 性能指标:吞吐、iops、延时 测试工具:fio 影响I/O性能的因素: 虚拟化,RAID,介质类型 服务器硬件性能全文共23页,当前为第13页。 I/O指标计算 - /proc/diskstats文件 以读数据为例: 读吞吐 = (两个采样点read扇区数的差值(6))* 扇区大小(512KB) / 采样间隔 IOPS = (两个采样点read操作总次数的差值(4))/ 采样间隔 利用率 = (两个采样点read操作耗时的差值(7))/ 采样间隔 延时 = (两个采样点read操作耗时的差值(7))/ (两个采样点read操作总次数的差值(4)) 平均操作大小 = 读吞吐 / (两个采样点read操作总次数的差值(4) ) 服务器硬件性能全文共23页,当前为第14页。 物理机和虚拟机IOPS比较 4k随机写测试IOPS fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=4k-rand-write \ --filename=benchmark.testing --bs=4k --iodepth=64 --size=4G --readwrite=randwrite 服务器硬件性能全文共23页,当前为第15页。 物理机和虚拟机延时比较(4k随机写) 4k随机写测试IOPS fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=4k-rand-write \ --filename=benchmark.testing --bs=4k --iodepth=64 --size=4G --readwrite=randwrite 服务器硬件性能全文共23页,当前为第16页。 RAID对硬盘吞吐的影响 64k顺序读测试吞吐 fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=64k-read \ --filename=benchmark.te
当VM的CPU使用率达到100%时,意味着虚拟机的处理器资源已被完全利用。这可能是由于运行在虚拟机上的应用程序或服务对CPU资源的过度消耗导致的。下面是可能导致CPU使用率达到100%的一些常见原因: 1. 虚拟机设置的CPU核心数不足:如果虚拟机配置的CPU核心数过低,无法满足应用程序的需求,就导致CPU使用率的上升。在这种情况下,可以尝试增加虚拟机的CPU核心数来提高处理能力。 2. 虚拟机中运行的应用程序负载过重:如果虚拟机上运行的应用程序负载过重,导致CPU使用率的升高。这可能是由于应用程序本身设计不合理或者存在性能问题导致的。可以通过优化应用程序的代码、增加硬件资源或者调整应用程序的配置来减轻CPU压力。 3. 虚拟机所在的物理机资源不足:如果宿主机上的物理资源如CPU、内存等不足,导致虚拟机的CPU使用率升高。这可能是由于物理机上同时运行着其他虚拟机或者存在其他高负载的应用程序导致的。可以尝试迁移虚拟机到资源更充足的宿主机上,或者增加宿主机的硬件资源来改善CPU使用率。 4. 病毒或恶意软件感染:虚拟机中的病毒或恶意软件可能导致CPU使用率的异常升高。及时安装并更新防病毒软件,并进行定期扫描以确保虚拟机的安全。 总之,当虚拟机的CPU使用率达到100%时,我们需要仔细分析相关的因素,找出导致CPU使用率高的原因,并采取相应的措施来解决问题,以确保虚拟机的性能和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值