Jak wygenerować obciążenie procesora na serwerze Linux

13

Chciałbym przetestować fałszywe obciążenie na serwerze, szukam jakiegoś narzędzia wypalającego lub testowego, które generowałoby obciążenie procesora w systemie.

Chciałbym móc wypalić tylko procesor (bez obciążenia twardego dysku, sieci i współpracy) i że byłbym w stanie ustawić okres, w którym ładowanie będzie działać. Czyli chcę coś, co można uruchomić: obciążenie procesora przez 10 minut w systemie.

Jakieś pomysły?

Maxim Veksler
źródło

Odpowiedzi:

6

Preferuję operacje zmiennoprzecinkowe:

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

Pamiętaj o numerze swojego procesora :-)


źródło
jak mogę timeto zrobić ?
Sébastien
2

To jest coś, co często chcę robić. Ale nie mam na to dobrego sposobu. Po prostu piszę mały skrypt Perla, który zapętla się przez tyle sekund, ile chcę.

Np. (Przez 10 minut):

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

Oczywiście, jeśli masz n procesorów, możesz dodać pętlę bash, aby utworzyć tak wiele procesów:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP.
źródło
4
Drugorzędny punkt: czy ta forpętla nie uruchomi ich szeregowo, a nie równolegle? Myślę jednak, że (perl -e '...' &)oderwanie ich od skorupy wystarczyłoby.
SmallClanger,
Masz rację. Poprawię mój post. Dzięki za zwrócenie na to uwagi.
PP.
1

Oto czysta powłoka (przynajmniej bash& ksh) sposób, który już opublikowałem jako odpowiedź na podobne pytanie tutaj

# 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
źródło