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

Ich bin gerade dabei, eine Cacti-Installation zu debuggen und möchte CPU-Auslastung erstellen, um meine CPU-Auslastungsdiagramme zu debuggen.

Ich habe versucht, einfach cat /dev/zero > /dev/null auszuführen, was gut funktioniert, aber nur 1 Kern verwendet:

geben Sie hier die Bildbeschreibung ein

Gibt es eine bessere Methode zum Testen/Maximieren von Systemressourcen unter Last?

Verwandte: Wie kann ich eine hohe CPU-Auslastung unter Windows erzeugen?

Author: Community, 2012-06-30

16 answers

Versuchen stress Es ist so ziemlich ein Äquivalent des Windows consume.exe:

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd
 238
Author: Mitesh Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-11-17 16:42:37

Sie müssen kein zusätzliches Paket installieren, Ihre gute alte Shell kann es alleine tun.

Dieser Einzeiler lädt Ihre vier Kerne1 bei 100%:

for i in 1 2 3 4; do while : ; do : ; done & done

Wie es funktioniert ist ganz einfach, es beginnt vier Endlosschleifen. Jeder von ihnen wiederholt die Null-Anweisung (:). Jede Schleife kann einen CPU-Kern zu 100% laden.

Wenn sie verwenden bash, ksh93 und andere Shells, die Bereiche unterstützen (dh nicht dash oder älter ksh), können diese nicht portabel verwenden syntax:

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

Ersetzen Sie 4 durch die Anzahl der CPUs, die Sie laden möchten, wenn sie sich von 4 unterscheiden.

Angenommen, Sie hatten keinen Hintergrundjob, der bereits ausgeführt wurde, als Sie eine dieser Schleifen gestartet haben, können Sie die Ladeerzeugung mit diesem Befehl stoppen:

for i in 1 2 3 4; do kill %$i; done

Wenn Sie den Kommentar von @underscore_d beantworten, finden Sie hier eine erweiterte Version, die das Stoppen des Ladevorgangs erheblich vereinfacht und auch die Angabe eines Zeitlimits ermöglicht (Standard 60 Sekunden.) A Kontrolle-C wird töte 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
  )
}

1Beachten Sie, dass bei CPUs, die mehr als einen Thread pro Kern unterstützen (Hyper-Threading), das Betriebssystem die Last an alle virtuellen CPUs sendet. In diesem Fall ist das Ladeverhalten implementierungsabhängig (jeder Thread wird möglicherweise als 100% ausgelastet gemeldet oder nicht)..

 122
Author: jlliagre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-27 11:21:55

Ich habe ein einfaches Python-Skript erstellt, das dasselbe tut. Sie können die Anzahl der CPU-Kerne steuern, die Sie laden möchten. Das Gute daran ist, dass außer der CPU keine andere Ressource verbraucht wird. (Ich denke, Mark Johnsons Idee würde viele E/A-Ressourcen verbrauchen, was hier unerwünscht ist.)

from multiprocessing import Pool

def f(x):
    # Put any cpu (only) consuming operation here. I have given 1 below -
    while True:
        x * x

# decide how many cpus you need to load with.
no_of_cpu_to_be_consumed = 3

p = Pool(processes=no_of_cpu_to_be_consumed)
p.map(f, range(no_of_cpu_to_be_consumed))

Führen Sie dieses Skript einfach über das Terminal $ python temp1.py aus. Sie müssen das Skript beenden, wenn Sie fertig sind.

Hier wird mein CPU-Verbrauch ausgegeben, wenn ich 3 meiner Adern.

Skript temp1.py erstellt drei Prozesse (PIDs-9377, 9378, 9379), die 3 meiner Kerne laden

 24
Author: Pushpak Dagade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-12-28 08:29:03

Ein alternativer Weg wäre

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

Oder (falls nproc vorhanden ist)

openssl speed -multi $(nproc --all)

OpenSSL ist fast immer auf Linux-Distributionen vorhanden, sodass keine zusätzlichen Pakete benötigt werden.

 23
Author: rkosegi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-06-18 08:16:22

Starte zwei

sha1sum /dev/zero &

- Befehle für jeden Kern in Ihrem system.

Zu stoppen

killall sha1sum

Oder

kill sha1sum
 12
Author: ecabuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-11-01 21:31:57

Ich habe die Entwicklung von stress-ng, eine aktualisierte stress-tool kann stress eine ganze Reihe von Aspekten eines Linux-Systems. Weitere Informationen finden Sie unter http://kernel.ubuntu.com/~cking/stress-ng/

Verwendung ist ähnlich wie Stress

$ stress-ng --cpu 4 --vm 2 --fork 8 --switch 4 --timeout 1m
stress-ng: info:  [32254] dispatching hogs: 4 cpu, 8 fork, 4 switch, 2 vm
stress-ng: info:  [32254] cache allocate: default cache size: 8192K

Installieren mit

sudo apt-get install stress-ng
 9
Author: Colin King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-03-22 08:25:17

Normalerweise nehme ich die cpuburn Suite:

sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done

Ersetzen Sie 4 durch die Anzahl der Kerne / HT-Threads, die Sie haben oder betonen möchten.

Hinweis: Diese betont so viel chip bereich wie möglich zur gleichen zeit, es ist programmiert zu erzeugen maximale verlustleistung. Ich musste diesen Beitrag ein zweites Mal schreiben, irgendwie mochte es meiner Maschine nicht: - (

Sie können auch cpuburn in Sequenzen ausführen:

burnP6 & burnP6 & burnP6 & burnP6 & 
[1] 28520
[2] 28521
[3] 28522
[4] 28523

Und wenn du sie aufhalten willst:

killall burnP6

Sie könnten auch multiplizieren burnP6 & so passen Sie die Anzahl der CPU-Kerne auf Ihrem System an.

 7
Author: ce4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-04-13 22:23:14

Sie können diesen Befehl so oft ausführen, wie Sie möchten, und er benötigt jedes Mal einen anderen Kern:

$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388
 3
Author: Christian Mann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-07-01 02:09:16

Https://github.com/GaetanoCarlucci/CPULoadGenerator

Ziemlich einfache und wissenschaftliche Lösung.

Hier sehen Sie ein Beispiel, in dem 50% Last auf CPU Core 0 erzeugt wird:

geben Sie hier die Bildbeschreibung ein

Sie können den Prozess auf anderen Kernen gleichzeitig ausführen.

 2
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-09-08 11:12:27

Ich kombinierte sowohl +jlliagre als auch +ecabuk.

#!/bin/bash
lc() {
    nowMs=$(date +%s)
    (
        pids=""
        cpus=${1:-1}
        seconds=${2:-60}
        echo "[$(date)] loading $cpus CPUs for $seconds seconds"
        echo "[$(date)] Expected completion: [$(date --date=@$(expr $nowMs + $seconds))]"
        trap 'for p in $pids; do kill $p; done' 0
        for ((i=0;i<cpus;i++)); do
            sha1sum /dev/zero &
            pids="$pids $!";
        done
        sleep $seconds
    )
    echo "[$(date)] Done"
}

lc $@
 1
Author: TJR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-06-22 16:59:30

pxz ist eine parallele Implementierung von xz.

pxz -9e /dev/zero --stdout >/dev/null sollte den Trick machen, da dies ziemlich CPU-intensiv ist.

Wenn /dev/zero nicht schnell genug ist (Sie bemerken, dass pxz E/A gedrosselt wird), können Sie Folgendes tun pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null

Neuere Versionen von xz haben die Option --threads, die pxz ersetzt.

 1
Author: styrofoam fly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-11-07 20:11:11

Hier ist die Art, wie ich benutze und es gibt keine Notwendigkeit, etwas extra zu installieren.

Zum Beispiel, um mit 4 Prozessen zu beginnen,

nproc | xargs seq | xargs -n1 -P4 md5sum /dev/zero

Sie können die Anzahl der Prozesse mit der Option "-P" oben ändern.

 1
Author: yichun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-05-17 15:33:18

Sie können verwenden:

fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd

Wiederholen Sie dd if=/dev/zero of=/dev/null für Ihre CPU-Kerne.

Drücken Sie eine beliebige Taste, um den Test zu stoppen!

 1
Author: Lyma Lyma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-05-13 13:31:03

Eine einfache Befehlszeile macht es auch:

x="x" ; while : ; do x=$x$x ; echo -n "." ; done
 0
Author: ott--,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-06-30 19:08:04

Ich wollte dies zu @jlliagres Kommentar hinzufügen, aber ich habe nicht genug Ruf. Wenn Sie diesen Code auf mehreren Servern verwenden und die CPU-Anzahl variiert, können Sie den folgenden Befehl verwenden:

for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done

Dadurch werden alle Kerne auf Ihrem Server verwendet, unabhängig davon, wie viele Sie haben. Der Befehl nproc ist Teil von coreutils und sollte sich daher auf den meisten Linux-Installationen befinden.

 0
Author: AndreasKralj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-12-11 21:11:36

Führen Sie das Programm aus stress Geben Sie alle Kerne an, die Sie auf Ihrer CPU haben:

stress -c `nproc`

Sie können es auf Debian/Ubuntu: sudo apt install stress

 0
Author: Smeterlink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-04-16 19:36:22