Búsqueda de sitios web

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


Como administrador de sistemas, es posible que desee examinar y monitorear el estado de sus sistemas Linux cuando se encuentran bajo estrés o carga elevada. Esta puede ser una buena manera para que los administradores de sistemas y programadores:

  1. afinar las actividades en un sistema.
  2. monitorear 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 que consumen energía en un sistema.

En esta guía, veremos dos herramientas importantes, stress y stress-ng para realizar 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 estrés de CPU, memoria, E/S y disco.

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

  1. Computación de CPU
  2. conducir el estrés
  3. Sincronizaciones de E/S
  4. E/S de tubería
  5. paliza de caché
  6. estrés de la máquina virtual
  7. tensión del casquillo
  8. creación y terminación de procesos
  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ápidamente y para evitar ciertos errores del sistema en hardware mal diseñado. .

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

Para instalar la herramienta Stress 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 utilizar estrés es:

sudo stress option argument

Algunas opciones que puedes utilizar con el estrés.

  1. Para generar N trabajadores que giran en la función sqrt(), use la opción –cpu N de la siguiente manera.
  2. Para generar N trabajadores que giran en la función sync(), use la opción –io N de la siguiente manera.
  3. Para generar N trabajadores que giran en funciones malloc()/free(), use la opción –vm N.
  4. Para asignar memoria por trabajador de máquina virtual, utilice la opción –vm-bytes N.
  5. En lugar de liberar y reasignar recursos de memoria, puede volver a ensuciar la memoria utilizando la opción –vm-keep.
  6. Establezca la suspensión en N segundos antes de liberar memoria usando la opción –vm-hang N.
  7. Para generar N trabajadores que giran en las funciones write()/unlink(), utilice la opción –hdd N.
  8. Puede establecer un tiempo de espera después de N segundos utilizando 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, utiliza la opción -v.
  11. Utilice –help para ver ayuda sobre el uso del estrés o ver la página de manual.

¿Cómo uso el estrés en los sistemas Linux?

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 stress para generar 8 trabajadores girando en sqrt() con un tiempo de espera de 20 segundos. Después de ejecutar estrés, ejecute nuevamente el comando uptime y compare el promedio de carga.


tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu  8 --timeout 20
tecmint@tecmint ~ $ uptime
Salida de muestra
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 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:

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
Salida de muestra
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 generar un trabajador de las funciones malloc() y free() con un tiempo de espera de 60 segundos, ejecute el siguiente comando.

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s 
tecmint@tecmint ~ $ uptime
Salida de muestra
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 generar 4 trabajadores girando en sqrt(), 2 trabajadores generando en sync(), 2 trabajadores en malloc()/free(), con un tiempo de 20 segundos y asignar una memoria de 256 MB por trabajador de máquina virtual, ejecute este comando a continuación.

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s 
tecmint@tecmint ~ $ uptime
Salida de muestra
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]