Como gerar carga de CPU no servidor Linux

13

Gostaria de testar a carga falsa no servidor, estou procurando algum utilitário de linha de comando de queima ou referência que geraria carga de CPU no sistema.

Eu gostaria de poder gravar apenas a CPU (sem carga de disco rígido, rede e empresa) e poder definir o período em que a carga será executada. Ou seja, eu quero algo que possa executar: carga da CPU por 10 minutos no sistema.

Alguma ideia?

Maxim Veksler
fonte

Respostas:

6

Eu prefiro operações de ponto flutuante:

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

Esteja ciente do seu número de CPU :-)


fonte
como posso timeisso?
Sébastien
2

Isso é algo que frequentemente quero fazer. Mas não tenho uma boa maneira de fazê-lo. Acabei de escrever um pequeno script Perl que fará um loop por quantos segundos eu quiser.

Por exemplo (por 10 minutos):

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

Obviamente, se você tiver n processadores, poderá adicionar um loop bash para criar muitos processos:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP.
fonte
4
Ponto secundário: esse forloop não os executará em série, e não em paralelo? Eu acho (perl -e '...' &)que separá-los da casca faria o trabalho, no entanto.
SmallClanger
Você está certo. Eu vou corrigir minha postagem. Obrigado por apontar isso.
PP.
1

Aqui está uma maneira pura de shell (pelo menos bash& ksh) que eu já postei como resposta a uma pergunta semelhante aqui

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