No hay necesidad de instalar ningún paquete extra, tu vieja y buena cáscara es capaz de hacerlo sola.
Esta línea cargará tus cuatro núcleos1 al 100%:
for i in 1 2 3 4; do while : ; do : ; done & done
La forma en que funciona es bastante simple, inicia cuatro bucles interminables. Cada uno de ellos repite la instrucción nula (:
). Cada bucle es capaz de cargar un núcleo de CPU al 100%.
Si utilizas bash
, ksh93
y otros shells que soporten rangos, (es decir, no dash
o más antiguo ksh
), puedes utilizar esta sintaxis no portátil:
for i in {1..4}; do ...
Reemplaza 4
con el número de CPUs que te gustaría cargar si es diferente de 4
.
Asumiendo que no tenías ningún trabajo de fondo ya ejecutándose cuando lanzaste uno de estos bucles, puedes detener la generación de la 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 (por defecto 60 segundos.) Un Control-C matará todos los bucles que se escapen también. Esta función del shell funciona al menos bajo bash
y 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
)
}
1Nota que con CPUs que soporten más de un hilo por núcleo (Hyper-threading), el SO despachará la carga a todas las CPUs virtuales. En ese caso, el comportamiento de la carga depende de la implementación (cada hilo puede ser reportado como 100% ocupado o no)..