Como impor alta carga de CPU e teste de estresse no Linux usando a ferramenta ‘Stress-ng’
Como administrador de sistema, você pode querer examinar e monitorar o status dos seus sistemas Linux quando eles estão sob estresse de alta carga. Esta pode ser uma boa maneira para administradores de sistema e programadores:
- ajustar atividades em um sistema.
- monitorar interfaces do kernel do sistema operacional.
- teste seus componentes de hardware Linux, como CPU, memória, dispositivos de disco e muitos outros, para observar seu desempenho sob estresse.
- medir diferentes cargas que consomem energia em um sistema.
Neste guia, veremos duas ferramentas importantes, stress e stress-ng para testes de estresse em seus sistemas Linux.
1. estresse – é uma ferramenta geradora de carga de trabalho projetada para submeter seu sistema a uma medida configurável de CPU, memória, E/S e estresse de disco.
2. stress-ng – é uma versão atualizada da ferramenta geradora de carga de trabalho de estresse que testa seu sistema quanto aos seguintes recursos:
- Computação da CPU
- estresse de condução
- Sincronizações de E/S
- E/S de tubulação
- destruição de cache
- Estresse da VM
- estresse de soquete
- criação e encerramento de processos
- propriedades de troca de contexto
Embora essas ferramentas sejam boas para examinar seu sistema, elas não devem ser usadas apenas por qualquer usuário do sistema.
Importante: É altamente recomendável que você use essas ferramentas com privilégios de usuário root, porque elas podem sobrecarregar sua máquina Linux muito rapidamente e para evitar certos erros de sistema em hardware mal projetado .
Como instalar a ferramenta ‘stress’ no Linux
Para instalar a ferramenta de estresse no Debian e seus derivados, como Ubuntu e Mint, execute o seguinte comando.
sudo apt-get install stress
Para instalar o stress em um Linux RHEL/CentOS e Fedora, você precisa ativar o repositório EPEL e digitar o seguinte comando yum para instalar o mesmo:
yum install stress
A sintaxe geral para usar stress é:
sudo stress option argument
Algumas opções que você pode usar com estresse.
- Para gerar N trabalhadores girando na função sqrt(), use a opção –cpu N como segue.
- Para gerar N trabalhadores girando na função sync(), use a opção –io N como segue.
- Para gerar N trabalhadores girando em funções malloc()/free(), use a opção –vm N.
- Para alocar memória por trabalhador VM, use a opção –vm-bytes N.
- Em vez de liberar e realocar recursos de memória, você pode reutilizá-la usando a opção –vm-keep.
- Defina a suspensão para N segundos antes de liberar memória usando a opção –vm-hang N.
- Para gerar N trabalhadores girando em funções write()/unlink(), use a opção –hdd N.
- Você pode definir um tempo limite após N segundos usando a opção –timeout N.
- Defina um fator de espera de N microssegundos antes de qualquer trabalho começar usando a opção –backoff N conforme a seguir.
- Para mostrar informações mais detalhadas ao executar o estresse, use a opção -v.
- Use –help para visualizar a ajuda sobre como usar o estresse ou visualizar a página de manual.
Como faço para usar o estresse em sistemas Linux?
1. Para examinar o efeito do comando toda vez que você executá-lo, primeiro execute o comando uptime e anote a média de carga.
Em seguida, execute o comando stress para gerar 8 trabalhadores girando em sqrt() com um tempo limite de 20 segundos. Após executar o estresse, execute novamente o comando uptime e compare a média de carga.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
tecmint@tecmint ~ $ uptime
Saída de amostra
tecmint@tecmint ~ $ uptime
17:20:00 up 7:51, 2 users, load average: 1.91, 2.16, 1.93 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
stress: info: [17246] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: info: [17246] successful run completed in 21s
tecmint@tecmint ~ $ uptime
17:20:24 up 7:51, 2 users, load average: 5.14, 2.88, 2.17 [<-- Watch Load Average]
2. Para gerar 8 trabalhadores girando em sqrt() com um tempo limite de 30 segundos, mostrando informações detalhadas sobre a operação, execute este comando:
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
Saída de amostra
tecmint@tecmint ~ $ uptime
17:27:25 up 7:58, 2 users, load average: 1.40, 1.90, 1.98 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
stress: info: [17353] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [17353] using backoff sleep of 24000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 8 [17354] forked
stress: dbug: [17353] using backoff sleep of 21000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 7 [17355] forked
stress: dbug: [17353] using backoff sleep of 18000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 6 [17356] forked
stress: dbug: [17353] using backoff sleep of 15000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 5 [17357] forked
stress: dbug: [17353] using backoff sleep of 12000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 4 [17358] forked
stress: dbug: [17353] using backoff sleep of 9000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 3 [17359] forked
stress: dbug: [17353] using backoff sleep of 6000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 2 [17360] forked
stress: dbug: [17353] using backoff sleep of 3000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 1 [17361] forked
stress: dbug: [17353] tecmint@tecmint ~ $ uptime
17:27:59 up 7:59, 2 users, load average: 5.41, 2.82, 2.28 [<-- Watch Load Average]
3. Para gerar um trabalhador das funções malloc() e free() com um tempo limite de 60 segundos, execute o seguinte comando.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
tecmint@tecmint ~ $ uptime
Saída de amostra
tecmint@tecmint ~ $ uptime
17:34:07 up 8:05, 2 users, load average: 1.54, 2.04, 2.11 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
stress: info: [17420] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: info: [17420] successful run completed in 60s
tecmint@tecmint ~ $ uptime
17:35:20 up 8:06, 2 users, load average: 2.45, 2.24, 2.17 [<-- Watch Load Average]
4. Para gerar 4 trabalhadores girando em sqrt(), 2 trabalhadores girando em sincronização(), 2 trabalhadores girando em malloc()/free(), com um tempo limite de 20 segundos e alocar uma memória de 256 MB por trabalhador VM, execute este comando abaixo.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
tecmint@tecmint ~ $ uptime
Saída de amostra
tecmint@tecmint ~ $ uptime
17:40:33 up 8:12, 2 users, load average: 1.68, 1.84, 2.02 [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
stress: info: [17501] dispatching hogs: 4 cpu, 3 io, 2 vm, 0 hdd
stress: info: [17501] successful run completed in 20s
tecmint@tecmint ~ $ uptime
17:40:58 up 8:12, 2 users, load average: 4.63, 2.54, 2.24 [<-- Watch Load Average]