Linux CPU

CPU信息

一台物理机的物理CPU的个数,一个CPU上的核数,一个核上面支持的线程数

有下面的计算公式:

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

CPU架构

多个物理CPU,各个CPU通过总线进行通信,效率比较低,如下

 

 

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信,如下:

 

 

多核超线程,每个核有两个逻辑的处理单元,两个线程共同分享一个核的资源,如下: 

 

 

 

CPU查询方式

方式一:

CPU型号的查询方式:[root@localhost ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

40 Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz

# 查看物理CPU个数
[root@localhost ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2
[root@localhost ~]# grep 'physical id' /proc/cpuinfo | sort -u | wc -l
2

# 查看每个物理CPU中core的个数(即核数)
[root@localhost ~]#  cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores    : 10

# 查看逻辑CPU的个数
[root@localhost ~]# cat /proc/cpuinfo| grep "processor"| wc -l
40

 从上面执行的结果来看,证明我使用的cpu有2 * 10 * 2 = 40核,每个核有2个超线程,所以有40个逻辑cpu。

 

 方式二:lscpu命令 查看获取系统 CPU 核心数

[root@localhost ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                40
On-line CPU(s) list:   0-39
Thread(s) per core:    2    #thread就是每个core上的硬件线程数,即超线程
Core(s) per socket:    10  # Core就是平时说的核,双核、四核等,就是每个CPU上的核数
座:                 2    # == Socket(s):     2  Socket就是主板上插CPU的槽的数量  2个cpu
NUMA 节点:         2
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              79
型号名称:        Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
步进:              1
CPU MHz:             1201.110
CPU max MHz:           3100.0000
CPU min MHz:           1200.0000
BogoMIPS:            4399.96
虚拟化:           VT-x
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           256K
L3 缓存:           25600K
NUMA 节点0 CPU:    0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
NUMA 节点1 CPU:    1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb cat_l3 cdp_l3 intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
[root@localhost ~]# 


对操作系统来说,其逻辑CPU的数量就是Socket*Core*Thread

 

 

 

CPU 负载信息查看常用命令: w、 top、 htop、 glances、uptime

w

 

 

top

 

htop

 

 

glances  参考https://www.cnblogs.com/anay/p/8994870.html

 linux cpu负载分析

linux下查看cpu负载及分析

其中load average的三个值分别表示1分钟、5分钟、15分钟的CPU负载情况,是运维需要经常关注的
那么怎么确定这些值展现出什么问题呢?
分析:

对于单核处理器来说(值的大小和cpu的核数有关系) ,可以把值分为3个级别

1)小于1.0 如果值小于1,那么说明系统cpu处理很流畅,不会出现等待,堵塞
2)等于1.0 说明cpu能力刚刚满负荷,
3)大于1.0 说明cpu已经超负荷,进程处理需要等待了,效率低下

对于多核处理器说(假设双核),等于说处理能力增加了一倍,比较的值就是2了,小于2.0才不用担心
    负载:(CPU处理任务过多)  
    a 利用文件进行查看:(监控)
      cat /proc/loadavg
      0.00        0.01              0.05             负载值CPU核数有关
      1分钟平均   5分钟平均负载    15分钟平均负载
      eg: 服务器4核的服务器   -- 负载值3左右,就要关注
          服务器128核的服务器 -- 负载值100(数据库服务器)

cat /proc/loadavg
0.04 0.03 0.05 1/319 21900
除了前 3 个数字表示系统平均负载外,后面的一个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程 ID。


      
    b 利用命令进行查看:
      [root@localhost ~]# w
       12:41:06 up 38 min,  2 users,  load average: 0.00, 0.01, 0.05

那么1/5/15分钟以哪个值为准呢?
一般5和15分钟才具有参考意义。

 linux 计算CPU负载

linux下/proc/stat 计算CPU利用率:https://blog.csdn.net/stormbjm/article/details/19088983

linux命令之top源码可编译版:https://blog.csdn.net/earbao/article/details/51277087

posted @ 2022-02-23 14:53  冥想心灵  阅读(306)  评论(0编辑  收藏  举报