吃鸡cpu利用率多少正常 cpu利用率多少正常( 二 )


CPU(s): 48
这里的48个CPU(s), 其实就是48个逻辑核 。有时 , 我们也可以说 , 这台服务器有48个核 。
这台服务器有2个CPU, 针对其中一个CPU , 我们也可以说 , 它是"12核24线程" 。
操作系统对核的分配需要注意的是 , 如上的服务器有2个CPU, 每个CPU有12物理核 , 每个物理核有2个逻辑核 , 这仅仅是针对特定服务器和CPU的 。
其他计算机或者CPU, 就不一定如此了 。来看我的另外一台服务器 , 配置略微寒酸:总共只有1个CPU, 1个物理核 , 1个逻辑核:
[email protected]:~$ lscpuArchitecture: x86_64CPU op-mode(s): 32-bit, 64-bitByte Order: Little EndianCPU(s): 1On-line CPU(s) list: 0Thread(s) per core: 1Core(s) per socket: 1Socket(s): 1NUMA node(s): 1Vendor ID: GenuineIntelCPU family: 6Model: 79Model name: Intel(R) Xeon(R) CPU E5-26xx v4Stepping: 1CPU MHz: 2394.446BogoMIPS: 4788.89Hypervisor vendor: KVMVirtualization type: fullL1d cache: 32KL1i cache: 32KL2 cache: 4096KNUMA node0 CPU(s): 0Flags: 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[email protected]:~$
如果在这个单核服务器上 , 运行如下的死循环程序 , 会如何呢?
#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利用率多少正常

文章插图
可以看到 , 整个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命令的信息: