Cómo imponer una alta carga de CPU y una prueba de estrés en Linux usando la herramienta 'Stress-ng'


Como administrador del sistema, es posible que desee examinar y supervisar el estado de sus sistemas Linux cuando se encuentran sometidos a una gran carga. Esta puede ser una buena forma para que los administradores de sistemas y los programadores:

  1. fine tune activities on a system.
  2. monitor operating system kernel interfaces.
  3. test your Linux hardware components such as CPU, memory, disk devices and many others to observe their performance under stress.
  4. measure different power consuming loads on a system.

En esta guía, veremos dos herramientas importantes, estrés y estrés-ng para las pruebas de estrés en sus sistemas Linux.

1. estrés: es una herramienta generadora de carga de trabajo diseñada para someter su sistema a una medida configurable de CPU, memoria, E/S y esfuerzo del disco.

2. stress-ng: es una versión actualizada de la herramienta generadora de carga de trabajo de estrés que prueba su sistema para las siguientes características:

  1. CPU compute
  2. drive stress
  3. I/O syncs
  4. Pipe I/O
  5. cache thrashing
  6. VM stress
  7. socket stressing
  8. process creation and termination
  9. context switching properties

Aunque estas herramientas son buenas para examinar su sistema, no deben ser utilizadas por cualquier usuario del sistema.

Importante: Se recomienda encarecidamente que utilice estas herramientas con privilegios de usuario root, ya que pueden estresar su máquina Linux tan rápido y evitar ciertos errores del sistema en hardware mal diseñado.

Cómo instalar la herramienta "estrés" en Linux

Para instalar la herramienta de estrés en Debian y sus derivados, como Ubuntu y Mint, ejecute el siguiente comando.

$ sudo apt-get install stress

Para instalar estrés en RHEL/CentOS y Fedora Linux, debe activar el repositorio EPEL y luego escribir el siguiente comando yum para instalar el mismo:

# yum install stress

La sintaxis general para usar el acento es:

$ sudo stress option argument

Algunas opciones que puedes usar con estrés.

  1. To spawn N workers spinning on sqrt() function, use the –cpu N option as follows.
  2. To spawn N workers spinning on sync() function, use the –io N option as follows.
  3. To spawn N workers spinning on malloc()/free() functions, use the –vm N option.
  4. To allocate memory per vm worker, use the –vm-bytes N option.
  5. Instead of freeing and reallocating memory resources, you can redirty memory by using the –vm-keep option.
  6. Set sleep to N seconds before freeing memory by using the –vm-hang N option.
  7. To spawn N workers spinning on write()/unlink() functions, use the –hdd N option.
  8. You can set a timeout after N seconds by using the –timeout N option.
  9. Set a wait factor of N microseconds before any work starts by using the –backoff N option as follows.
  10. To show more detailed information when running stress, use the -v option.
  11. Use –help to view help for using stress or view the manpage.

1. Para examinar el efecto del comando cada vez que lo ejecuta, primero ejecute el comando uptime y anote el promedio de carga.

A continuación, ejecute el comando de estrés para generar 8 trabajadores girando en sqrt () con un tiempo de espera de 20 segundos. Después de ejecutar el estrés, ejecute nuevamente el comando de tiempo de actividad y compare el promedio de carga.

[email protected] ~ $ uptime
[email protected] ~ $ sudo stress --cpu  8 --timeout 20
[email protected] ~ $ uptime
[email protected] ~ $ uptime    
 17:20:00 up  7:51,  2 users,  load average: 1.91, 2.16, 1.93     [<-- Watch Load Average]
[email protected] ~ $ 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
[email protected] ~ $ uptime
 17:20:24 up  7:51,  2 users,  load average: 5.14, 2.88, 2.17     [<-- Watch Load Average]

2. Para generar 8 trabajadores girando en sqrt () con un tiempo de espera de 30 segundos, mostrando información detallada sobre la operación, ejecute este comando:

[email protected] ~ $ uptime
[email protected] ~ $ sudo stress --cpu 8 -v --timeout 30s
[email protected] ~ $ uptime
[email protected] ~ $ uptime
 17:27:25 up  7:58,  2 users,  load average: 1.40, 1.90, 1.98     [<-- Watch Load Average]
[email protected] ~ $ 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] [email protected] ~ $ uptime
 17:27:59 up  7:59,  2 users,  load average: 5.41, 2.82, 2.28     [<-- Watch Load Average]

3. Para ejecutar un trabajador de las funciones malloc () y free () con un tiempo de espera de 60 segundos, ejecute el siguiente comando.

[email protected] ~ $ uptime
[email protected] ~ $ sudo stress --vm 1 --timeout 60s 
[email protected] ~ $ uptime
[email protected] ~ $ uptime
 17:34:07 up  8:05,  2 users,  load average: 1.54, 2.04, 2.11     [<-- Watch Load Average]
[email protected] ~ $ 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
[email protected] ~ $ uptime
 17:35:20 up  8:06,  2 users,  load average: 2.45, 2.24, 2.17     [<-- Watch Load Average]

4. Para ejecutar 4 trabajadores girando en sqrt (), 2 trabajadores girando en sync (), 2 trabajadores en malloc ()/free (), con un tiempo de 20 segundos y asignar una memoria de 256 MB por trabajador virtual, ejecute este comando a continuación.

[email protected] ~ $ uptime
[email protected] ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s 
[email protected] ~ $ uptime
[email protected] ~ $ uptime
 17:40:33 up  8:12,  2 users,  load average: 1.68, 1.84, 2.02     [<-- Watch Load Average]
[email protected] ~ $ 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
[email protected] ~ $ uptime
 17:40:58 up  8:12,  2 users,  load average: 4.63, 2.54, 2.24     [<-- Watch Load Average]