Wie viele Kerne verwende ich auf einem Linux-Server?

28553
Tim

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!

30

6 Antworten auf die Frage

39
Alix Axel

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 
25
Matt Solnit

Ich weiß nicht, ob es hilfreich ist, aber Sie können das mpstatDienstprogramm 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, 1und 6machen 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.

mpstatVerwenden Sie zur Installation auf einem Fedora-, RHEL- oder CentOS-System yum install sysstat.

Vielen Dank für diese Antwort! Meine Kollegen benutzten den "top" -Befehl und machten alle falschen Rückschlüsse auf die Prozessorauslastung, bis ich ihnen den mpstat-Befehl zeigte. Nav vor 13 Jahren 0
Nicht verfügbar auf Ubuntu: `# aptitude search mpstat #`. Alix Axel vor 11 Jahren 0
@AlixAxel stattdessen `aptitude search systat` verwenden. Matt Solnit vor 11 Jahren 2
@ MattSolnit: Immer noch kein Glück. Alix Axel vor 11 Jahren 0
mpstat wird vom Paket `sysstat` [unter Debian] (https://packages.debian.org/jessie/sysstat) und [unter Ubuntu] (http://packages.ubuntu.com/xenial/sysstat) bereitgestellt. Ich würde erwarten, dass die meisten von Debian stammenden Distributionen denselben Paketnamen verwenden. Beginnen Sie bei von Debian abgeleiteten Distributionen mit apt-cache search --full mpstat. a CVn vor 7 Jahren 0
Dies ist die beste Antwort - da sie zeigt, was jeder Kern tut. Es funktioniert sofort auf einem Centos 6-Server. itoctopus vor 7 Jahren 0
2
EmmEff

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.

Ich übermittle eine ganze Reihe von Hintergrundjobs an den Server, daher schreibe ich gerne ein Bash-Skript, um zu prüfen, ob ich die Jobaufträge (Prozesse) von mir übergebe, bevor ich einen Job übergebe genug Kerne für ihre Jobs. Ich möchte gerne wissen, was der bash-Befehl mir sagen kann, wie viele Kerne meine Jobs jetzt verwenden. Tim vor 14 Jahren 0
Ich glaube nicht, dass du meine Antwort verstanden hast. Die Anzahl der verwendeten Kerne ist IMMER die Gesamtzahl der verfügbaren Kerne. Verwenden Sie die Gesamtsystemlast als Faktor, um zu bestimmen, ob Ihre Auftragsübergabe gedrosselt werden soll oder nicht. EmmEff vor 14 Jahren 3
Vielen Dank! Ich überprüfe die Gesamtlast des Systems. Einer meiner Kollegen hat mir gesagt, dass ich nicht alle Kerne aufbrauchen kann, denn wer weiß, dass andere ihre Jobs bald erledigen werden und meine Jobs eine ganze Weile dauern werden. Denken Sie auch, dass ich die verwendeten Kerne beschränken muss? Tim vor 14 Jahren 0
2
pbr

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".

Ich habe gerade einen Kommentar bemerkt, den Sie zur Antwort eines anderen Posters hinzugefügt haben. Er weist darauf hin, dass dies auf etwas zurückzuführen ist, das Ihnen ein Kollege erzählt hat. Es scheint also in der Tat, dass das Missverständnis von ihm stammt, nicht von Ihnen. Das tut mir leid! pbr vor 14 Jahren 0
Vielen Dank! In Bezug auf "Ermitteln Sie für Ihr bestimmtes System, wie hoch der LOAD-Level ist, wenn Sie der Meinung sind, dass es für andere Benutzer" akzeptabel "ist, weitere Jobs hinzuzufügen." Wenn die aktuelle Last nicht hauptsächlich durch meine laufenden Jobs verursacht wird, kann ich mich frei entscheiden die restlichen CPUs, aber wenn meine laufenden Jobs in der aktuellen Last einen ordentlichen Betrag beanspruchen, muss ich wahrscheinlich auf die restlichen CPUs verzichten. Denken Sie immer noch, dass ich die CPU-Auslastung meiner insgesamt ausgeführten Jobs nicht schätzen muss? Tim vor 14 Jahren 0
Nein, ich glaube wirklich nicht, dass es sinnvoll ist, zu unterscheiden, wie viel von der aktuellen Last von Ihren Jobs abhängt, und von anderen Jobs. Bedenken Sie die Einfachheit: Ihr Job versucht, ein guter Bürger zu sein und legt sich nur dann vor, wenn die Last unter einem Niveau liegt, das Sie für akzeptabel halten. Die Idee ist, NIEMALS die gesamte verbleibende Kapazität zu nutzen. das lässt andere zukünftige Benutzer in einer Bindung. Im Idealfall verwenden alle Benutzer die gleiche Logik. pbr vor 14 Jahren 0
2
tim_yates

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) 
1
dmckee

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.

Ich möchte gerne einen Bash-Befehl kennen, der mir die Nummer mitteilen kann, da ich ihn in einem Bash-Skript verwenden möchte. Tim vor 14 Jahren 0
@Tim `top` kann im Batch-Modus mit der Option -b ausgeführt werden. Kombinieren Sie es mit der Option -n, um die Anzahl der erforderlichen Iterationen zu erhalten. nagul vor 14 Jahren 0
Können Sie ein Codebeispiel angeben, um die Anzahl der Kerne zu ermitteln, die von allen Jobs (Prozessen) verwendet werden, die von einem Benutzer übermittelt werden? Tim vor 14 Jahren 1
@ Tim Nicht aus dem Takt. Ich muss entweder ein solches Skript schreiben, indem ich die `top`-Ausgabe parse oder google, um zu sehen, ob jemand es bereits getan hat. Ich bin jedoch nicht überzeugt, dass sich die Mühe lohnt, denn ich denke, ich bekomme für jeden Lauf unterschiedliche Ergebnisse, wenn man die Geschwindigkeit angibt, mit der Kontextwechsel erfolgen. Ist die Systemlast nicht ein Indikator für ausreichend? Es zeigt Ihnen effektiv an, wie viele virtuelle Kerne für die Verarbeitung der Prozesswarteschlange (auf die CPU wartende Prozesse) erforderlich sind. nagul vor 14 Jahren 0
@nagul: Ja die Systemlast ist gut und ich überprüfe das auch. Einige Leute sagen mir immer wieder, dass ich nicht alle Kerne verbrauchen kann, denn wer weiß, dass andere ihre Jobs bald erledigen werden. Ich denke, ich muss die Kerne einschränken, die ich benutze. Haben Sie übrigens irgendwo Online-Skripts gesehen, die die CPU- und Speicherauslastung überprüfen und Jobs basierend auf der Nutzung dynamisch übergeben? Ich habe sie so lange gesucht. Vielen Dank! Tim vor 14 Jahren 0
Der Versuch, Kerne zu zählen, ist der * falsche * Weg, die CPU zuzuordnen. Das ist der Job des Kernels. Um es zu optimieren, verwenden Sie "[re] nice" oder, wenn das nicht genug ist, erhalten Sie einen Warteschlangenmanager wie "pbs". dmckee vor 14 Jahren 0
Relevanter Link: http://superuser.com/questions/49020/linux-queuing-system dmckee vor 14 Jahren 0
@Tim würde ich einen anderen Ansatz vorschlagen. Wie EmmEff sagt, werden beide Kerne * verwendet, solange die Systemlast über 1,0 liegt. Verwenden Sie ein Skript, das die Ausgabe von "top" analysiert, um die prozentuale CPU-Auslastung Ihrer Prozesse zu ermitteln. Wenn die kumulative Auslastung einen bestimmten Schwellenwert überschreitet, verringert sie ihre Priorität mit "nice". Oder besser noch, wenn Sie unbedingt sicherstellen müssen, dass Sie nicht alle Kerne belasten, binden Sie * alle * Prozesse an einen Kern: http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task- or-process.html nagul vor 14 Jahren 0
@Nagul: Danke! Ich schaffe es endlich, indem ich die Spitze parse Tim vor 14 Jahren 0