Cómo generar carga de CPU en el servidor Linux

13

Me gustaría probar una carga falsa en el servidor, estoy buscando alguna utilidad de línea de comandos de referencia o de grabación que genere carga de CPU en el sistema.

Me gustaría poder grabar solo CPU (sin carga de disco duro, red y co) y poder establecer el período en el que se ejecutará la carga. Lo que significa que quiero algo que pueda ejecutarse: carga de CPU durante 10 minutos en el sistema.

¿Algunas ideas?

Maxim Veksler
fuente

Respuestas:

6

Prefiero operaciones de coma flotante:

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

Tenga en cuenta su número de CPU :-)


fuente
¿Cómo puedo timeesto?
Sébastien
2

Esto es algo que frecuentemente quiero hacer. Pero no tengo una buena forma de hacerlo. Simplemente escribo un pequeño script de Perl que se repetirá durante tantos segundos como quiera.

Por ejemplo (por 10 minutos):

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

Por supuesto, si tiene n procesadores, es posible que desee agregar un bucle bash para crear tantos procesos:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PÁGINAS.
fuente
44
Un pequeño punto: ¿No que forbucle de ejecutarlos en serie, en lugar de paralelo? Sin (perl -e '...' &)embargo, creo que separarlos del caparazón haría el trabajo.
SmallClanger
Tienes razón. Corregiré mi publicación. Gracias por señalar eso.
PP.
1

Aquí hay una forma pura de shell (al menos bash& ksh) que ya publiqué como respuesta a una pregunta similar aquí

# 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
fuente