Cómo imponer una alta carga de CPU y una prueba de estrés en Linux con 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. ajustar las actividades de un sistema.
  2. supervisar las interfaces del kernel del sistema operativo.
  3. pruebe sus componentes de hardware de Linux, como CPU, memoria, dispositivos de disco y muchos otros para observar su rendimiento bajo estrés.
  4. medir diferentes cargas de consumo de energía en un sistema.

En esta guía, veremos dos herramientas importantes, el estrés y el 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. Computación de CPU
  2. generar estrés
  3. Sincronizaciones de E/S
  4. E/S de tubería
  5. eliminación de caché
  6. Estrés de VM
  7. enfatizar el encaje
  8. creación y terminación del proceso
  9. propiedades de cambio de contexto

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 muy 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. Para generar N trabajadores girando en la función sqrt(), use la opción –cpu N de la siguiente manera.
  2. Para generar N trabajadores girando en la función sync(), use la opción –io N de la siguiente manera.
  3. Para generar N trabajadores girando en funciones malloc()/free(), use la opción –vm N.
  4. Para asignar memoria por trabajador virtual, use la opción –vm-bytes N.
  5. En lugar de liberar y reasignar recursos de memoria, puede volver a ensuciar la memoria usando la opción –vm-keep.
  6. Configure la suspensión en N segundos antes de liberar memoria mediante la opción –vm-hang N.
  7. Para generar N trabajadores girando en las funciones write()/unlink(), use la opción –hdd N.
  8. Puede establecer un tiempo de espera después de N segundos mediante la opción –timeout N.
  9. Establezca un factor de espera de N microsegundos antes de que comience cualquier trabajo utilizando la opción –backoff N de la siguiente manera.
  10. Para mostrar información más detallada al ejecutar estrés, use la opción -v.
  11. Utilice –help para ver la ayuda para usar el estrés o ver la página de manual.

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 esto 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]