Wie kann ich auf einem Linux-Server eine hohe CPU-Auslastung erzeugen?

Wie kann ich auf einem Linux-Server eine hohe CPU-Auslastung erzeugen?

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:

Bildbeschreibung hier eingeben

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, ksh93die Bereiche unterstützen (also nicht dashoder älter ksh), können Sie diese nicht portable Syntax verwenden:

for i in {1..4}; do ...

Ersetzen Sie es 4durch 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 bashund 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

verwandte Informationen