Linux查看物理CPU个数、CPU内核数、线程数、和占用的进程

Linux查看物理CPU个数、CPU内核数、线程数、和占用的进程

前言:

physical id:每颗CPU的id,计算系统中有几个CPU。
cpu cores:当前的CPU有几个核心。
processor:每个CPU线程的id,计算系统中总计有几个CPU线程。

㈠ 概念

① 物理CPU

  • 实际Server中插槽上的CPU个数
  • 物理cpu数量,可以数不重复的 physical id 有几个

② 逻辑CPU

  • Linux用户对 /proc/cpuinfo 这个文件肯定不陌生. 它是用来存储cpu硬件信息的
  • 信息内容分别列出了processor 0 – n 的规格。这里需要注意,如果你认为n就是真实的cpu数的话, 就大错特错了
  • 一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来
  • 逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)
  • 备注一下:Linux下top查看的CPU也是逻辑CPU个数

③ CPU核数

  • 一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU
  • 一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术

物理cpu*核心数<逻辑CPU 说明支持超线程

计算公式

总核心数 = 物理CPU个数  X  每颗物理CPU的核数
常规情况下:总逻辑CPU数 = 物理CPU个数  X  每颗物理CPU的核数  X  超线程数

有特殊情况(一般不考虑,部分服务器可能存在这种情况,但是系统信息回详细注明):
比如有高性能线程数+第性能线程数据的情况:
eg:
核心数:14
高性能线程数:6
低性能线程数:8
逻辑CPU数据=6*2+8=20

查看方式

# 查看CPU逻辑id
grep 'physical id' /proc/cpuinfo | sort -u

# 查询物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的核数(即个数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

# 查看总线程数量
grep 'processor' /proc/cpuinfo | sort -u | wc -l

# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

# cpu详细信息
cat /proc/cpuinfo

案例

查看CPU信息(型号)以及个数(这里不是有12颗cpu)
[root@AAA ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
     24         Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
	 
# 查看物理CPU个数
[root@AAA ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2

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

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

其他

intel官方查看CPU列表信息

https://ark.intel.com/content/www/us/en/ark.html#@Processors
1234567891011121314151617181920212223242526

CPU占用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k3|head -10 

内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10 

虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10

	USER      //用户名
	%CPU      //进程占用的CPU百分比
	%MEM      //占用内存的百分比
	VSZ       //该进程使用的虚拟內存量(KB)
	RSS       //该进程占用的固定內存量(KB)resident set size
	STAT      //进程的状态
	START     //该进程被触发启动时间
	TIME      //该进程实际使用CPU运行的时间

	ps auxw
	u:以用户为主的格式来显示程序状况
	x:显示所有程序,不以终端机来区分 
	w:采用宽阔的格式来显示程序状况
	ps auxw|head -1 输出表头
	
	sort -rn -k5 
	-n是按照数字大小排序
	-r是以相反顺序
	-k是指定需要排序的栏位

tty (Teletype terminal )与进程关联的终端
    串行端口终端(/dev/ttySn)
    伪终端(/dev/pty/) 
    控制终端(/dev/tty) 
    控制台终端(/dev/ttyn,   /dev/console) 
    虚拟终端(/dev/pts/n) 

stat取值含义
	D      //无法中断的休眠状态(通常 IO 的进程);
	R      //正在运行可中在队列中可过行的;
	S      //处于休眠状态;
	T      //停止或被追踪;
	W      //进入内存交换 (从内核2.6开始无效);
	X      //死掉的进程 (基本很少见);
	Z      //僵尸进程;
	<      //优先级高的进程
	N      //优先级较低的进程
	L      //有些页被锁进内存;
	s      //进程的领导者(在它之下有子进程);
	l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
	+      //位于后台的进程组;

案例

以下配置:
物理CPU数量(即实际服务器插槽插的CPU个数:2): Socket(s): 2
每颗CPU的核心数: Core(s) per socket: 16
每个核心的线程数: Thread(s) per core: 2
逻辑CPU数: CPU(s): 64

逻辑CPU=物理CPU数量每颗CPU的核心数每个核心的线程数

[root@prod-bip-db02 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                64
On-line CPU(s) list:   0-63
Thread(s) per core:    2
Core(s) per socket:    16
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 106
Model name:            Intel(R) Xeon(R) Silver 4314 CPU @ 2.40GHz
Stepping:              6
CPU MHz:               1205.273
CPU max MHz:           3400.0000
CPU min MHz:           800.0000
BogoMIPS:              4800.00
Virtualization:        VT-x
L1d cache:             48K
L1i cache:             32K
L2 cache:              1280K
L3 cache:              24576K
NUMA node0 CPU(s):     0-15,32-47
NUMA node1 CPU(s):     16-31,48-63
posted @ 2025-06-26 15:51  数据库小白(专注)  阅读(2139)  评论(0)    收藏  举报