Não é necessário instalar nenhum pacote extra, seu bom e velho shell é capaz de fazê-lo sozinho.
Esse liner carregará seus quatro núcleos 1 em 100%:
for i in 1 2 3 4; do while : ; do : ; done & done
Como funciona é bastante simples, inicia quatro loops sem fim. Cada um deles está repetindo a instrução nula ( :
). Cada loop é capaz de carregar um núcleo de CPU a 100%.
Se você usar bash
, ksh93
e outras conchas apoio faixas, (ou seja, não dash
anos ou mais ksh
), você pode usar essa sintaxe não portátil:
for i in {1..4}; do ...
Substitua 4
pelo número de CPUs que você deseja carregar, se diferente 4
.
Supondo que você ainda não estivesse executando o trabalho em segundo plano quando lançou um desses loops, é possível parar a geração de carga com esse comando:
for i in 1 2 3 4; do kill %$i; done
Respondendo ao comentário de @ underscore_d, aqui está uma versão aprimorada que simplifica bastante a interrupção do carregamento e também permite especificar um tempo limite (padrão 60 segundos). A Control- Ctambém matará todos os loops descontrolados. Esta função shell funciona pelo menos sob bash
e 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 Observe que, com as CPUs suportando mais de um encadeamento por núcleo (Hyper-threading), o sistema operacional envia a carga para todas as CPUs virtuais. Nesse caso, o comportamento do carregamento depende da implementação (cada encadeamento pode ser relatado como 100% ocupado ou não). .
cat
simultaneamente?