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

1voto

kmario23 Punkte 49380

Wenn es in Ordnung ist, dass Sie Python verwenden können, dann numexpr Modul verfügt über eine Funktion für diesen Zweck:

In [5]: import numexpr as ne

In [6]: ne.detect_number_of_cores()
Out[6]: 8

auch dies:

In [7]: ne.ncores
Out[7]: 8

Um diese Informationen über die Eingabeaufforderung abzufragen, verwenden Sie:

# runs whatever valid Python code given as a string with `-c` option
$ python -c "import numexpr as ne; print(ne.ncores)"
8

Oder es ist einfach möglich, diese Informationen zu erhalten von multiprocessing.cpu_count() Funktion

$ python -c "import multiprocessing; print(multiprocessing.cpu_count())"

Oder, noch einfacher, verwenden Sie os.cpu_count()

$ python -c "import os; print(os.cpu_count())"

1voto

Wenn Sie nur die physischen Kerne zählen wollen, hat dieser Befehl das für mich erledigt.

lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w

Ziemlich einfach, scheint aber die tatsächlichen physischen Kerne zu zählen und ignoriert die logische Anzahl

1voto

Srikant Patra Punkte 371

Verwenden Sie die folgende Abfrage, um die wichtigsten Details zu erhalten

[oracle@orahost](TESTDB)$ grep -c ^processor /proc/cpuinfo
8

1voto

user1593842 Punkte 358

Die Antwort von Fravadona ist großartig und richtig aber es erfordert die Anwesenheit von lscpu . Da es auf dem System, auf dem ich die Anzahl der physischen Kerne benötige, nicht vorhanden ist, habe ich versucht, eine Lösung zu finden, die sich nur auf proc/cpuinfo

cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings.*/'/ | tr -d '[:space:]' | sed 's/--/\n/'g | sort -u | wc -l

Es funktioniert perfekt, aber leider ist es nicht so robust wie das von Fravadona, da es kaputt geht, wenn

  • den Namen oder die Reihenfolge der Felder in /proc/cpuinfo Änderungen
  • grep ersetzt das eingefügte Zeilentrennzeichen (derzeit -- ) durch eine andere Zeichenfolge.

ABER, ansonsten funktioniert es einwandfrei :)

Hier eine kurze Erläuterung zu allem, was gerade passiert

grep -B2 'core id'

nur die Zeilen abrufen, die uns interessieren (d. h. "core id" und die 2 vorangehenden Zeilen)

sed 's/siblings.*/'/

die Zeile "Geschwister..." entfernen

tr -d '[:space:]'

Ersetzen von Abstandsbuchstaben

sed 's/--/\n/'g

das von grep eingefügte Zeichen '--' durch einen Zeilenumbruch ersetzen

sort -u

gruppieren nach "physische ID, Kern-ID"

wc -l

die Anzahl der Zeilen zählen

Da ich ein absoluter Anfänger bin, war ich sehr zufrieden mit mir, als es funktionierte. Ich hätte nie gedacht, dass ich in der Lage sein würde, die erforderlichen Zeilen miteinander zu verbinden, um nach "physical id" und "core id" zu gruppieren. Es ist zwar etwas hakelig, aber es funktioniert.

Wenn ein Guru einen Weg kennt, dieses Chaos zu vereinfachen, lassen Sie es mich bitte wissen.

1voto

Gary Liggons Punkte 11
cat /proc/cpuinfo | grep processor

Das hat gut funktioniert. Als ich die erste Antwort ausprobierte, erhielt ich 3 CPUs als Ausgabe. Ich weiß, dass ich 4 CPUs auf dem System habe, also habe ich einfach eine grep für Prozessor und die Ausgabe sah wie folgt aus:

[root@theservername ~]# cat /proc/cpuinfo | grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3

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