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:
Gibt es eine bessere Methode zum Testen/Maximieren von Systemressourcen unter Last?
Verwandte: Wie kann ich eine hohe CPU-Auslastung unter Windows erzeugen?
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
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)..
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.
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.
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
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
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.
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
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:
Sie können den Prozess auf anderen Kernen gleichzeitig ausführen.
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 $@
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.
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.
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!
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
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.
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
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