
Ich bin derzeit dabei,Debuggen einer Cacti-Installationund möchte eine CPU-Auslastung erstellen, um meine CPU-Auslastungsdiagramme zu debuggen.
Ich habe versucht, einfach auszuführen cat /dev/zero > /dev/null
. Das funktioniert gut, nutzt aber nur einen Kern:
Gibt es eine bessere Methode zum Testen/Maximieren der Systemressourcen unter Last?
Verwandt:Wie kann ich unter Windows eine hohe CPU-Auslastung erzeugen?
Antwort1
Versuchenstress
Es ist so ziemlich das Äquivalent zu Windows consume.exe
:
oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
Antwort2
Sie müssen kein zusätzliches Paket installieren, Ihre gute alte Shell kann das alleine.
Dieser Einzeiler lädt Ihre vier Kerne 1 zu 100 %:
for i in 1 2 3 4; do while : ; do : ; done & done
Die Funktionsweise ist ganz einfach: Es werden vier Endlosschleifen gestartet. Jede davon wiederholt den Nullbefehl ( :
). Jede Schleife kann einen CPU-Kern zu 100 % auslasten.
Wenn Sie und andere Shells verwenden bash
, ksh93
die Bereiche unterstützen (also nicht dash
oder älter ksh
), können Sie diese nicht portable Syntax verwenden:
for i in {1..4}; do ...
Ersetzen Sie es 4
durch die Anzahl der CPUs, die Sie laden möchten, falls diese von abweicht 4
.
Vorausgesetzt, Sie haben beim Starten einer dieser Schleifen noch keinen Hintergrundjob ausgeführt, können Sie die Lastgenerierung mit dem folgenden Befehl stoppen:
for i in 1 2 3 4; do kill %$i; done
Als Antwort auf den Kommentar von @underscore_d: Hier ist eine erweiterte Version, die das Stoppen des Ladevorgangs erheblich vereinfacht und die Angabe eines Timeouts (Standard 60 Sekunden) ermöglicht. A Control- Cbeendet auch alle außer Kontrolle geratenen Schleifen. Diese Shell-Funktion funktioniert zumindest unter bash
und ksh
.
# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
(
pids=""
cpus=${1:-1}
seconds=${2:-60}
echo loading $cpus CPUs for $seconds seconds
trap 'for p in $pids; do kill $p; done' 0
for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
sleep $seconds
)
}
1 Beachten Sie, dass bei CPUs, die mehr als einen Thread pro Kern unterstützen (Hyperthreading), das Betriebssystem die Last auf alle virtuellen CPUs verteilt. In diesem Fall ist das Lastverhalten implementierungsabhängig (jeder Thread kann als zu 100 % ausgelastet gemeldet werden oder nicht). .
Antwort3
Eine alternative Möglichkeit wäre
openssl speed -multi $(grep -ci processor /proc/cpuinfo)
oder (wenn nproc vorhanden ist)
openssl speed -multi $(nproc --all)
OpenSSL ist in den heutigen Distributionen fast immer vorhanden, es werden daher keine zusätzlichen Pakete benötigt.
Antwort4
Start zwei
sha1sum /dev/zero &
Befehle für jeden Kern in Ihrem System.
Stoppen
killall sha1sum
oder
kill sha1sum