我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
这个线程中的大多数答案都与逻辑核心有关。
在Ubuntu 18上使用BaSH。x,我发现这可以很好地确定物理cpu的数量:
numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"
它应该可以在大多数Linux发行版上运行。
其他回答
上述答案适用于大多数情况,但如果您处于docker容器环境中,并且容器受到CpusetCpus的限制,那么您实际上无法通过上述方法获得真正的cpu内核。
在这种情况下,你需要这样做来获得真正的cpu内核:
grep -c 'cpu[0-9]' /proc/stat
使用getconf确实是最可移植的方式,但是变量在BSD和Linux中与getconf有不同的名称,所以你必须测试这两个,正如要点所示: https://gist.github.com/jj1bdx/5746298 (还包括使用ksh的Solaris修复)
我个人使用:
$ getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1
如果你想在python中使用这个,你可以通过导入os模块来使用getconf使用的syscall:
$ python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);'
至于nproc,它是GNU Coreutils的一部分,所以默认情况下在BSD中不可用。它在其他一些方法之后也使用sysconf()。
Fravadona的回答很好,也很正确,但它需要lscpu的存在。由于在需要物理核数的系统上不存在它,所以我试图提出一个只依赖于proc/cpuinfo的系统
cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings。* / / | tr - d的[空间:]| sed的年代/——/ \ n / g | - u | wc - l
它工作得很完美,但不幸的是,它没有Fravadona的那么坚固,因为它会崩溃
/proc/cpuinfo中字段的名称或顺序发生变化 Grep将它插入的行分隔符(当前为——)替换为其他字符串。
但是,除此之外,它完美无缺:)
以下是对正在发生的一切的快速解释
grep -B2 'core id'
只获取我们感兴趣的行(即“core id”和前面的两行)
sed 's/siblings.*/'/
去掉“兄弟姐妹…”这一行
tr -d '[:space:]'
替换空格字符
sed 's/--/\n/'g
用换行符替换由grep插入的'——'字符
sort -u
按“物理id,核心id”分组
wc -l
数一下行数
作为一个完全的菜鸟,我对自己很满意。我从来没有想过我能够将所需的行连接在一起,以“physical id”和“core id”进行分组。这有点俗气,但很管用。
如果有任何专家知道如何简化这种混乱,请告诉我。
dmidecode | grep -i cpu | grep Version
给我
版本:Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz 版本:Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz
这是正确的插座数量-查找E5-2667告诉我每个插座有8个核心,所以乘以,最终在2个插座上有16个核心。
lscpu给了我20个cpu -这是完全不正确的-不知道为什么。(cat /proc/cpu也一样-结果是20。
简介: 获取物理cpu:
grep 'core id' /proc/cpuinfo | sort -u
获取物理和逻辑cpu:
grep -c ^processor /proc/cpuinfo
/proc <<这是你需要的任何关于进程和
/proc/cpuinfo <<是任何CPU信息的黄金资源。