684 Stimmen

Wie erhält man die Anzahl der CPUs/Kerne in Linux über die Befehlszeile?

Ich habe dieses Skript, aber ich weiß nicht, wie ich das letzte Element im Ausdruck erhalten kann:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

Das letzte Element sollte die Anzahl der CPUs minus 1 sein.

15 Stimmen

Das müssen Sie nicht cat antes de awk trotzdem: einfach awk '<script>' /proc/cpuinfo und so weiter: awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo . Und du kommst ohne "minus eins" rein.

2 Stimmen

Um die Frage direkt zu beantworten, leiten Sie das nach tail -n 1 der die letzte Zeile übernimmt und ausgibt.

1 Stimmen

7voto

tim_yates Punkte 160397

Wenn Sie dies tun wollen, so dass es auf Linux und OS X funktioniert, können Sie tun:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

6voto

Six Punkte 4487

Sie können eine der folgenden Methoden verwenden, um die Anzahl der physisch CPU-Kerne.

  • Zählen Sie die Anzahl der eindeutigen Kernkennungen (entspricht in etwa grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l ).

    awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo

  • Multiplizieren Sie die Anzahl der "Kerne pro Sockel" mit der Anzahl der Sockel.

    lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}'

  • Zählt die Anzahl der eindeutigen logischen CPUs, die vom Linux-Kernel verwendet werden. Die -p Option erzeugt eine Ausgabe zum einfachen Parsen und ist kompatibel mit früheren Versionen von lscpu .

    lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'


Ich möchte nur wiederholen, was andere gesagt haben: Es gibt eine Reihe von verwandten Eigenschaften.

Zur Bestimmung der Anzahl der verfügbaren Prozessoren:

getconf _NPROCESSORS_ONLN
grep -cP '^processor\t' /proc/cpuinfo

Zur Bestimmung der Anzahl der verfügbaren Verarbeitungseinheiten (nicht unbedingt identisch mit der Anzahl der Kerne). Dies ist Hyperthreading-kompatibel.

nproc

Ich möchte nicht zu weit in die Tiefe gehen, aber Sie können die Anzahl der konfigurierten Prozessoren (im Gegensatz zu den einfach verfügbaren/online verfügbaren Prozessoren) auch ermitteln über getconf _NPROCESSORS_CONF . Um die Gesamtzahl der CPUs (offline und online) zu bestimmen, müssen Sie die Ausgabe von lscpu -ap .

6voto

bhanu mantri Punkte 87

Es ist ganz einfach. Verwenden Sie einfach diesen Befehl:

lscpu

6voto

aka.ecc Punkte 141

Die obigen Antworten sind auf die meisten Situationen anwendbar, aber wenn Sie sich in einer Docker-Container-Umgebung befinden und Ihr Container durch CpusetCpus dann kann man mit der obigen Methode nicht die tatsächlichen Prozessorkerne ermitteln .

In diesem Fall müssen Sie dies tun, um die tatsächlichen Prozessorkerne zu erhalten:

grep -c 'cpu[0-9]' /proc/stat

4voto

ntninja Punkte 996

Für den Fall, dass sich jemand fragt, was die Python psutil.cpu_count(logical=False) Aufruf unter Linux in einem entsprechenden Shell-Skript erfolgt:

cat /sys/devices/system/cpu/cpu[0-9]*/topology/core_cpus_list | sort -u | wc -l

Und hier ist eine etwas längere Version, die auf die Informationen aus der veralteten Version zurückgreift thread_geschwister_liste Datei, wenn core_cpus_list nicht verfügbar ist (psutil hat diesen Fallback):

cat /sys/devices/system/cpu/cpu[0-9]*/topology/{core_cpus_list,thread_siblings_list} | sort -u | wc -l

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X