So erhalten Sie die Anzahl der CPU- Kerne pro CPU:
grep "^core id" /proc/cpuinfo | sort -u | wc -l
Oder um die Anzahl der physischen CPUs zu erhalten :
grep "^physical id" /proc/cpuinfo | sort -u | wc -l
Ich frage mich nur, wie ich in bash herausfinden kann, wie viele CPU-Kerne ein Benutzer jetzt auf einem Linux-Server verwendet.
Ich übermittle eine ganze Reihe von Hintergrundjobs an den Server, daher möchte ich ein Bash-Skript schreiben, um zu prüfen, ob ich die von mir übergebenen laufenden Jobs (Prozesse) zu viele übergebe, weil ich zu viele Jobs ausführen muss, weil ich andere zulassen muss Benutzer haben genügend Kerne für ihre Jobs. Ich würde gerne wissen, was der bash-Befehl mir sagen kann, wie viele Kerne meine Jobs derzeit verwenden.
Danke und Grüße!
So erhalten Sie die Anzahl der CPU- Kerne pro CPU:
grep "^core id" /proc/cpuinfo | sort -u | wc -l
Oder um die Anzahl der physischen CPUs zu erhalten :
grep "^physical id" /proc/cpuinfo | sort -u | wc -l
Ich weiß nicht, ob es hilfreich ist, aber Sie können das mpstat
Dienstprogramm verwenden, um die CPU-Auslastung nach Prozessor (oder Core) aufzuschlüsseln. Zum Beispiel:
$ mpstat -P ALL 1 12:49:59 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 12:50:00 PM all 7.89 0.00 1.25 0.88 0.00 0.00 0.00 89.97 1359.00 12:50:00 PM 0 14.00 0.00 0.00 0.00 0.00 0.00 0.00 86.00 1043.00 12:50:00 PM 1 15.84 0.00 7.92 3.96 0.00 0.99 0.00 71.29 297.00 12:50:00 PM 2 3.96 0.00 0.00 1.98 0.00 0.99 0.00 93.07 0.00 12:50:00 PM 3 3.96 0.00 0.99 2.97 0.00 0.00 0.00 92.08 0.00 12:50:00 PM 4 4.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00 0.00 12:50:00 PM 5 4.95 0.00 0.99 0.00 0.00 0.00 0.00 94.06 18.00 12:50:00 PM 6 10.89 0.00 0.99 0.00 0.00 0.00 0.00 88.12 0.00 12:50:00 PM 7 5.05 0.00 0.00 0.00 0.00 0.00 0.00 94.95 0.00
In diesem Beispiel können Sie die CPU sehen 0
, 1
und 6
machen mehr Arbeit, als der Rest von ihnen. Manchmal werden Sie feststellen, dass eine einzelne CPU nahe (oder bei) 100% ist, während andere bei Null sind. Dies kann ein Indikator für ein Programm (oder einen Teil eines Programms) sein, das Singlethreading ist und nur eine einzelne CPU gleichzeitig verwenden kann.
mpstat
Verwenden Sie zur Installation auf einem Fedora-, RHEL- oder CentOS-System yum install sysstat
.
Wenn dies nicht explizit konfiguriert ist (z. B. das Festlegen eines Prozesses an eine bestimmte CPU), kann davon ausgegangen werden, dass alle Kerne jederzeit verwendet werden. Der Scheduler weist Prozesse den nächsten verfügbaren Kern zu. In diesem Fall zeigt "System Monitor" (Teil von GNOME), dass meine Last über alle vier Kerne meiner Maschine fast gleich ist.
Sie werden sehen, dass es hier Antworten gibt, die Ihnen zeigen, wie Ihre Kerne verwendet werden.
JEDOCH - das ist nicht wirklich ein Dienst. Sie haben eine Grundannahme getroffen, die einfach nicht zutrifft - dass Ihre Jobs dazu neigen, sich auf einen Teil der Kerne zu gruppieren.
Stattdessen werden Ihre Jobs auf alle Kerne verteilt, es sei denn, Sie implementieren etwas, das sie irgendwie "eingepfercht" hält. (Hinweis: Ich empfehle das nicht; ich sage nur "wenn nicht")
Hier eine alternative Strategie: Ermitteln Sie für Ihr bestimmtes System die Ladestufe, wenn Sie das Gefühl haben, dass es für andere Benutzer "akzeptabel" ist, weitere Jobs hinzuzufügen. Erstellen Sie dann etwas, das nur einen neuen Hintergrundjob sendet, wenn die Laststufe unter diesem Grenzwert liegt.
Auf diese Weise wird die Lösung von der Anzahl der Kerne unabhängig, tragbarer, flexibler und einfacher zu "zwicken".
Wenn Sie dies tun möchten, damit es unter Linux und OS X funktioniert, können Sie Folgendes tun:
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
Sie können eine ungefähre Schätzung erhalten top
, indem Sie ' U
' ausführen, Ihren Benutzernamen angeben und anschließend die CPU-Auslastung Ihrer wichtigsten Prozesse addieren.