Pesquisa de site

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:

  1. ajustar atividades em um sistema.
  2. monitorar interfaces do kernel do sistema operacional.
  3. teste seus componentes de hardware Linux, como CPU, memória, dispositivos de disco e muitos outros, para observar seu desempenho sob estresse.
  4. 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:

  1. Computação da CPU
  2. estresse de condução
  3. Sincronizações de E/S
  4. E/S de tubulação
  5. destruição de cache
  6. Estresse da VM
  7. estresse de soquete
  8. criação e encerramento de processos
  9. 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.

  1. Para gerar N trabalhadores girando na função sqrt(), use a opção –cpu N como segue.
  2. Para gerar N trabalhadores girando na função sync(), use a opção –io N como segue.
  3. Para gerar N trabalhadores girando em funções malloc()/free(), use a opção –vm N.
  4. Para alocar memória por trabalhador VM, use a opção –vm-bytes N.
  5. Em vez de liberar e realocar recursos de memória, você pode reutilizá-la usando a opção –vm-keep.
  6. Defina a suspensão para N segundos antes de liberar memória usando a opção –vm-hang N.
  7. Para gerar N trabalhadores girando em funções write()/unlink(), use a opção –hdd N.
  8. Você pode definir um tempo limite após N segundos usando a opção –timeout N.
  9. Defina um fator de espera de N microssegundos antes de qualquer trabalho começar usando a opção –backoff N conforme a seguir.
  10. Para mostrar informações mais detalhadas ao executar o estresse, use a opção -v.
  11. 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]