So generieren Sie eine CPU-Auslastung auf einem Linux-Server

13

Ich möchte eine gefälschte Auslastung des Servers testen. Ich suche ein Burn-In- oder Benchmark-Befehlszeilenprogramm, das eine CPU-Auslastung des Systems erzeugt.

Ich möchte in der Lage sein, nur die CPU einzubrennen (keine Festplattenlast, Netzwerk und Co) und dass ich den Zeitraum einstellen kann, in dem die Last ausgeführt wird. Das heißt, ich möchte etwas, das ausgeführt werden kann: CPU-Last für 10 Minuten auf dem System.

Irgendwelche Ideen?

Maxim Veksler
quelle

Antworten:

6

Ich bevorzuge Gleitkommaoperationen:

for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done

Achte auf deine CPU Nummer :-)


quelle
wie kann ich timedas
Sébastien
2

Das ist etwas, was ich oft machen möchte. Aber ich kann es nicht gut machen. Ich schreibe nur ein kleines Perl-Skript, das so viele Sekunden wiederholt, wie ich möchte.

ZB (für 10 Minuten):

perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $j *= 1.1 for (1..9999); }'

Wenn Sie n Prozessoren haben, möchten Sie möglicherweise eine Bash-Schleife hinzufügen, um so viele Prozesse zu erstellen:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP.
quelle
4
Minor point: Wird diese forSchleife sie nicht in Serie statt parallel laufen lassen? Ich denke (perl -e '...' &), sie von der Muschel zu trennen, würde den Job machen.
SmallClanger
Du hast recht. Ich werde meinen Beitrag korrigieren. Vielen Dank für den Hinweis.
PP.
1

Hier ist eine reine Shell (zumindest bash& ksh) Möglichkeit, die ich bereits als Antwort auf eine ähnliche Frage hier gepostet habe

# 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
  )
}
jlliagre
quelle