Comment générer une charge CPU sur un serveur Linux

13

Je voudrais tester une fausse charge sur le serveur, je recherche un utilitaire de ligne de commande de brûlage ou de référence qui générerait une charge CPU sur le système.

Je voudrais pouvoir graver uniquement du CPU (pas de charge de disque dur, de réseau et de co) et que je serais en mesure de définir la période pendant laquelle la charge s'exécutera. Ce qui signifie que je veux quelque chose qui pourrait fonctionner: charge du processeur pendant 10 minutes sur le système.

Des idées?

Maxim Veksler
la source

Réponses:

6

Je préfère les opérations en virgule flottante:

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

Soyez conscient de votre numéro de CPU :-)


la source
comment est- timece que je peux cela?
Sébastien
2

C'est quelque chose que je veux souvent faire. Mais je n'ai pas un bon moyen de le faire. J'écris juste un petit script Perl qui va boucler pendant autant de secondes que je veux.

Par exemple (pendant 10 minutes):

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

Bien sûr, si vous avez n processeurs, vous voudrez peut-être ajouter une boucle bash pour créer autant de processus:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP.
la source
4
Point mineur: cette forboucle ne fonctionnera-t-elle pas en série plutôt qu'en parallèle? Je pense que (perl -e '...' &)les détacher de la coque ferait l'affaire.
SmallClanger
Tu as raison. Je vais corriger mon message. Merci d'avoir fait remarquer cela.
PP.
1

Voici une manière pure shell (au moins bash& ksh) que j'ai déjà postée comme réponse à une question similaire ici

# 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
la source