Je hoeft geen extra pakket te installeren, je goede oude schil kan het alleen.
Deze one-liner laadt je vier kernen1 op 100%:
for i in 1 2 3 4; do while : ; do : ; done & done
Hoe het werkt is vrij eenvoudig, het start vier eindeloze lussen. Elk van deze lussen herhaalt de null instructie (:
). Elke lus is in staat om een CPU kern op 100% te laden.
Als je bash
, ksh93
en andere shells ondersteunende bereiken gebruikt, (dus niet dash
of oudere ksh
), kun je deze niet-overdraagbare syntax gebruiken:
for i in {1..4}; do ...
Vervang 4
met het aantal CPU’s dat je wilt laden als het anders is dan 4
.
In de veronderstelling dat je geen achtergrond job had die al draaide toen je een van deze lussen lanceerde, kan je het laden stoppen met dat commando:
for i in 1 2 3 4; do kill %$i; done
Antwoorden @underscore_d’s commentaar, hier is een verbeterde versie die veel vereenvoudigen bij het stoppen van het laden en die ook het opgeven van een time-out (standaard 60 seconden.) Een Control-C zal ook alle weggelopen lussen doden. Deze shell functie werkt tenminste onder bash
en 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
)
}
1Note dat met CPU’s die meer dan één thread per core ondersteunen (Hyper-threading), het OS de load naar alle virtuele CPU’s zal sturen. In dat geval is het loadgedrag afhankelijk van de implementatie (elke thread kan als 100% bezet worden gerapporteerd of niet).