¿Cómo puedo producir una carga alta de CPU en un servidor Linux?

¿Cómo puedo producir una carga alta de CPU en un servidor Linux?

Actualmente estoy en el proceso dedepurar una instalación de Cactiy quiero crear una carga de CPU para depurar mis gráficos de utilización de CPU.

Intenté simplemente ejecutar cat /dev/zero > /dev/null, que funciona muy bien pero solo utiliza 1 núcleo:

ingrese la descripción de la imagen aquí

¿Existe un método mejor para probar/maximizar los recursos del sistema bajo carga?

Relacionado:¿Cómo puedo producir una carga alta de CPU en Windows?

Respuesta1

Intentarstress Es prácticamente un equivalente de Windows consume.exe:

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd

Respuesta2

No es necesario instalar ningún paquete adicional, su antiguo shell puede hacerlo solo.

Esta frase cargará sus cuatro núcleos 1 al 100%:

for i in 1 2 3 4; do while : ; do : ; done & done

El funcionamiento es bastante sencillo: inicia cuatro bucles sin fin. Cada uno de ellos está repitiendo la instrucción nula ( :). Cada bucle es capaz de cargar un núcleo de CPU al 100%.

Si usa bashy ksh93otros shells que admiten rangos (es decir, no dasho anteriores ksh), puede usar esta sintaxis no portátil:

for i in {1..4}; do ...

Reemplace 4con la cantidad de CPU que desea cargar si es diferente de 4.

Suponiendo que no tenía ningún trabajo en segundo plano ejecutándose cuando inició uno de estos bucles, puede detener la generación de carga con ese comando:

for i in 1 2 3 4; do kill %$i; done

Respondiendo al comentario de @underscore_d, aquí hay una versión mejorada que simplifica mucho la detención de la carga y que también permite especificar un tiempo de espera (predeterminado 60 segundos). A Control: Ctambién eliminará todos los bucles fuera de control. Esta función de shell funciona al menos bajo bashy ksh.

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

1 Tenga en cuenta que con las CPU que admiten más de un subproceso por núcleo (Hyper-threading), el sistema operativo enviará la carga a todas las CPU virtuales. En ese caso, el comportamiento de carga depende de la implementación (se puede informar que cada subproceso está 100 % ocupado o no). .

Respuesta3

Una forma alternativa sería

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

o (si nproc está presente)

openssl speed -multi $(nproc --all)

OpenSSL casi siempre está presente en las distribuciones actuales, por lo que no se necesitan paquetes adicionales.

Respuesta4

empezar dos

sha1sum /dev/zero &

comandos para cada núcleo de su sistema.

Para detener

killall sha1sum

o

kill sha1sum

información relacionada