Wie erhält man die Anzahl der CPUs / Kerne in Linux von der Kommandozeile?
Habe ich dieses Skript, aber ich weiß nicht, wie man das Letzte element in dem Ausdruck:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
Das Letzte element sollte der Anzahl der CPUs minus 1.
Kommentar zu dem Problem
Sie nicht brauchen, um
Katze
vor awk
, eh nur awk '<script>' /proc/cpuinfo
: awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo
. Und Sie erhalten ohne "minus eins". InformationsquelleAutor der Frage Richard | 2011-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
oder einfach
die Anzahl von Zeilen, beginnend mit "Prozessor" in
/proc/cpuinfo
InformationsquelleAutor der Antwort unbeli
Verarbeitung des Inhalts
/proc/cpuinfo
ist unnötig Barock. Verwenden nproc die Bestandteil von coreutils, also es sollte auf den meisten Linux-Installationen.Befehl
nproc
druckt die Anzahl der Verarbeitungseinheiten zur Verfügung, um den aktuellen Prozess kann weniger als die Anzahl der online-Prozessoren.Finden Sie die Anzahl aller installierten Kerne/Prozessoren verwenden
nproc --all
Auf meinem 8-core-Maschine:
InformationsquelleAutor der Antwort uckelman
Den meisten tragbaren Lösung, die ich gefunden habe, ist das
getconf
Befehl:Diese funktioniert sowohl auf Linux und Mac OS X. ein Weiterer Vorteil dieser über einige der anderen Ansätze ist, dass getconf gewesen herum für eine lange Zeit. Einige ältere Linux-Maschinen zu tun haben, ich-Entwicklung auf nicht die
nproc
oderlscpu
Befehle zur Verfügung, aber Sie habengetconf
.Anmerkung der Redaktion: Während die
getconf
Dienstprogramm POSIX-Mandat, die spezifischen_NPROCESSORS_ONLN
und_NPROCESSORS_CONF
Werte nicht.Das sagte, wie gesagt, Sie arbeiten auf Linux-Plattformen als auch auf macOS; auf FreeBSD/PC-BSD, müssen Sie ausgelassen
_
.InformationsquelleAutor der Antwort mshildt
Vorwort:
Den problem mit der
/proc/cpuinfo
-basierten Antworten ist, dass Sie die Informationen analysieren, die gemeint war für menschlichen Verbrauch und damit fehlt ein stabiles format, entworfen für Maschine analysieren: das Ausgabe-format kann Verschieden Plattformen hinweg-und Laufzeit-Bedingungen; mitlscpu -p
auf Linux (undsysctl
auf OSX) umgeht dieses problem.getconf _NPROCESSORS_ONLN
/getconf NPROCESSORS_ONLN
unterscheidet nicht zwischen logische und körperliche CPUs.Hier ein
bash
- Schnipsel funktioniert auf Linux und macOS für die Bestimmung der Anzahl der - online - logische oder körperliche CPUs; siehe die Kommentare für weitere details.Verwendet
lscpu
für Linux, undsysctl
für macOS.Terminologie beachten: CPU bezieht sich auf die kleinste Verarbeitungseinheit in der OS. Nicht-hyper-threading-Kerne jeweils entsprechen 1 CPU, in der Erwägung, dass hyper-threading-Kerne enthalten mehr als 1 (in der Regel: 2) - logisch - CPU.
Linux verwendet die folgenden Taxonomie, beginnend mit der kleinsten Einheit: CPU < core < Buchse < Buch < Knoten, mit jedem Niveau, bestehend aus 1 oder mehr Instanzen auf der nächst tieferen Ebene.
Mein wissen ist etwas wackelig hier - lassen Sie mich wissen, wenn ich falsch Liege.
Weiß jemand, was ein "Buch" ist in diesem Zusammenhang?
[1] macOS
sysctl (3)
- DokumentationBeachten Sie, dass die BSD-abgeleiteten Systemen andere als macOS - z.B., FreeBSD - Unterstützung nur die
hw.ncpu
Schlüssel fürsysctl
, die veraltet sind auf macOS; ich bin unklar, auf welchen der neue Schlüsselhw.npu
entspricht:hw.(logical|physical)cpu_[max]
.Tipp der Hut, um @teambob für die Hilfe zu korrigieren, die körperliche-CPU-count
lscpu
Befehl.VORBEHALT:
lscpu -p
Ausgabe NICHT enthalten ist eine "Buch" - Spalte (dieman
Seite erwähnt "Bücher" als eine Einheit zwischen Steckdose und Knoten in der taxonomischen Hierarchie). Wenn "Bücher" sind im Spiel auf eine bestimmte Linux-system (weiß jemand, Wann und wie?), die physische CPU-count-Befehl kann unter-Bericht (dies basiert auf der Annahme, dasslscpu
Berichte IDs sind nicht eindeutig über übergeordnete Entitäten; z.B.: 2 unterschiedliche Kerne aus 2 verschiedenen Steckdosen könnte, haben die gleiche ID).InformationsquelleAutor der Antwort mklement0
Dieser arbeitete für mich.
tail -nX
können Sie schnappen Sie sich nur die letzten X Zeilen.Wenn du hyperthreading sollte diese Arbeit für die Aufbereitung der Anzahl der körperliche Kerne.
InformationsquelleAutor der Antwort lunixbochs
Für die Gesamtanzahl der physischen Kerne:
Auf mehrere sockel-Maschinen (oder immer), multiplizieren Sie das obige Ergebnis durch die Anzahl der buchsen:
@mklement0 hat durchaus eine nette Antwort unten mit lscpu. Ich habe geschrieben, kurz und bündig-version in den Kommentaren
InformationsquelleAutor der Antwort teambob
Mit getconf ist in der Tat die meisten tragbaren Weg, aber die variable hat verschiedene Namen in BSD und Linux, getconf, so dass Sie haben, um zu prüfen, wie diese Kern-Idee:
https://gist.github.com/jj1bdx/5746298
(enthält auch ein Solaris-Update mit ksh)
Ich persönlich benutze:
Und wenn Sie wollen, dass diese in python, können Sie einfach die syscall-getconf verwendet, die durch den Import der os-Modul:
Als für
nproc
, es ist Teil der GNU Coreutils, also nicht in BSD standardmäßig. Es nutzt sysconf() als auch nach einigen anderen Methoden.InformationsquelleAutor der Antwort mmu_man
Wenn Sie dies tun wollen, damit es funktioniert auf linux und OS X, die Sie tun können:
InformationsquelleAutor der Antwort tim_yates
Können Sie auch Python! Um die Anzahl der physischen Kerne:
, Um die Anzahl der HyperThread-cores:
InformationsquelleAutor der Antwort ostrokach
Plattformübergreifende Lösung für Linux, MacOS, Windows:
InformationsquelleAutor der Antwort Sergey
lscpu sammelt CPU-Architektur Informationen /proc/cpuinfon in der human-read-fähig-format:
InformationsquelleAutor der Antwort Sh4msi
Sollte Folgendes geben Sie die Anzahl der "echten" Kerne auf einem HyperThread-und nicht-HyperThread-system. Zumindest funktionierte es in meinen tests.
InformationsquelleAutor der Antwort foomiser
Können Sie verwenden Sie eine der folgenden Methoden, um zu bestimmen, die Anzahl der körperliche CPU-Kerne.
Count die Anzahl der eindeutigen core-ids (das entspricht rund
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 socket, die von der Anzahl der sockets.
lscpu | awk '/^Core\(s\) per socket:/{cores=$NF}; /^Socket\(s\):/{sockets=$NF}; END{print cores*sockets}'
Zählen Sie die Anzahl der logischen CPU ' s wie der Linux-kernel. Die
-p
option erzeugt-Ausgang für eine einfache Analyse und ist kompatibel mit früheren Versionen vonlscpu
.lscpu -p | awk -F, '$0 !~ /^#/{cores[$1]++} END {print length(cores)}'
Nur zu wiederholen, was andere gesagt haben, gibt es eine Reihe von verwandten Eigenschaften.
Zu bestimmen, die Anzahl der verfügbaren Prozessoren:
Zur Bestimmung der Anzahl der Verarbeitungseinheiten zur Verfügung (nicht notwendigerweise die gleiche wie die Anzahl der Kerne). Dies ist die hyperthreading-bewusst.
Ich will nicht zu weit zu gehen, down the rabbit-hole, Sie können aber auch bestimmen die Anzahl der konfigurierten Prozessoren (im Gegensatz zu einfach verfügbar/online-Prozessoren) über
getconf _NPROCESSORS_CONF
. Um zu bestimmen, insgesamt die Anzahl der CPU ' s (offline und online), die Sie wollen, um zu analysieren die Ausgabe vonlscpu -ap
.InformationsquelleAutor der Antwort Six
Count "core id" pro "physical id" - Methode unter Verwendung von awk mit fall-back auf "Prozessor" zählen wenn "core id" sind nicht verfügbar (wie Himbeeren)
InformationsquelleAutor der Antwort Totaly FuRy
Hier ist der Weg, ich benutze zum zählen der Anzahl von physischen Prozessorkernen, die online sind, auf Linux:
kurz:
InformationsquelleAutor der Antwort Fravadona
Dies funktionierte gut. Als ich versuchte, die erste Antwort bekam ich 3 CPU ' s als output. Ich weiß, dass ich 4 CPUs auf dem system, so, ich habe gerade ein
grep
für den Prozessor und die Ausgabe sah so aus:InformationsquelleAutor der Antwort Gary Liggons
Schneller, ohne Gabel
Diese Arbeit mit almsost alle shell.
Um kompatibel zu bleiben mit Schale, dash, busybox und andere, die ich benutzt habe
ncore=$((ncore+1))
statt((ncore++))
.bash - version
InformationsquelleAutor der Antwort F. Hauri
Nicht meine web-Seite, aber dieser Befehl von http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 funktioniert gut für mich auf centos. Es wird sich zeigen aktuelle cpus, auch wenn hyperthreading aktiviert ist.
cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l
InformationsquelleAutor der Antwort Chaim Geretz
gibt mir
Die korrekte Buchse zählen - die Suche des
E5-2667
sagt mir jeder socket hat8 cores
, so multiplizieren und am Ende mit16 cores
über2 sockets
.Wo
lscpu
mir20 CPUs
- das ist völlig falsch - nicht sicher, warum. (gleiche gilt fürcat /proc/cpu
- endet mit20
.InformationsquelleAutor der Antwort Hank42