Come generare carico CPU sul server Linux


13

Vorrei testare il carico falso sul server, sto cercando un programma di utilità da linea di comando burn-in o benchmark che genererebbe il carico della CPU sul sistema.

Vorrei poter eseguire il burn-in solo della CPU (senza carico sul disco fisso, rete e co) e che sarei in grado di impostare il periodo in cui verrà eseguito il caricamento. Significato Voglio qualcosa che sarebbe in grado di funzionare: carico della CPU per 10 minuti sul sistema.

Qualche idea?

Risposte:



6

Preferisco le operazioni in virgola mobile:

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

Fai attenzione al tuo numero di CPU :-)


come posso timequesto?
Sébastien,

2

Questo è qualcosa che spesso voglio fare. Ma non ho un buon modo di farlo. Scrivo solo un piccolo script Perl che andrà in loop per tutti i secondi che voglio.

Ad esempio (per 10 minuti):

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

Naturalmente se hai n processori potresti voler aggiungere un loop bash per creare tanti processi:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait

4
Punto minore: quel forciclo non li eseguirà in serie, anziché in parallelo? Penso che (perl -e '...' &)staccarli dalla shell farebbe comunque il lavoro.
SmallClanger il

Hai ragione. Correggerò il mio post. Grazie per la segnalazione.
PP.



1

Ecco un modo shell (almeno bash& ksh) che ho già pubblicato come risposta a una domanda simile qui

# 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
  )
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.