如何计算 CPU 内核数?

yod*_*ode 6 cpu

当然我们知道cat /proc/cpuinfo |grep "cpu cores"会给出一个输出

[root@14:47 ~]#  cat /proc/cpuinfo |grep "cpu cores"
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2
Run Code Online (Sandbox Code Playgroud)

但实际上我想获得 cpu 内核的总数。我希望结果是

cpu cores: 8
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这样的结果?

ss_*_*iwe 11

尝试这个,

按照 man lscpu

CORE   The logical core number. A core can contain several CPUs.

SOCKET The logical socket number. A socket can contain several cores.
Run Code Online (Sandbox Code Playgroud)

cores以及sockets是物理的,CPU(s)逻辑数也是。因此,要找到您的系统拥有的核心数,请执行以下操作number of cores x number of sockets

的示例输出lscpu如下:

Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
Run Code Online (Sandbox Code Playgroud)

所以总人数 cores: 16

的总数CPU(s): 32(因为threads每个core2

正如@Durga 提到的,nproc给出的CPUs.

如需更多信息,请参阅本答案,得到的解释/proc/cpuinfo是指

我要感谢 @ Kusalananda帮助我理解相同的内容


Dur*_*rga 8

在 Terminal 中nproc,OP:总 CPU 核心数

  • @yode 不要使用那个#,正如你的问题,我猜你的系统中只有 2 个内核,而不是 8 个 (2认同)

Flo*_*oHe 7

如果你只对 sum 感兴趣,你也可以使用 GNU awk:

cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'
Run Code Online (Sandbox Code Playgroud)

编辑:这是 OP 对最后一列的数字求和的意图的正确答案。然而,关于找出机器上有多少个内核(物理/虚拟)的问题在该问题的其他答案中给出。

  • `awk` 可以进行模式匹配,你很少需要同时使用 `grep` 和 `awk`:`awk -F: '/cpu cores/ {num+=...`,另外,`grep` 和 `awk` 都可以读取直接文件,所以不需要“cat” (2认同)

Dav*_*ter 5

如果你有 glibc 和一个相当新的内核,你可以使用

getconf _NPROCESSORS_ONLN
Run Code Online (Sandbox Code Playgroud)

返回当前在线1处理器的数量。这包括虚拟和超线程处理器。


1在大多数系统上,这将与处理器数相同。一个或多个处理器因某种原因(例如,由于故障或由于租用/许可硬件等人为限制)而禁用的系统或支持“热插拔”CPU、添加了新 CPU 但尚未启用的系统除外。