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:
- afinar las actividades en un sistema.
- monitorear las interfaces del kernel del sistema operativo.
- Pruebe sus componentes de hardware de Linux, como CPU, memoria, dispositivos de disco y muchos otros, para observar su rendimiento bajo estrés.
- 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:
- Computación de CPU
- conducir el estrés
- Sincronizaciones de E/S
- E/S de tubería
- paliza de caché
- estrés de la máquina virtual
- tensión del casquillo
- creación y terminación de procesos
- 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.
- Para generar N trabajadores que giran en la función sqrt(), use la opción –cpu N de la siguiente manera.
- Para generar N trabajadores que giran en la función sync(), use la opción –io N de la siguiente manera.
- Para generar N trabajadores que giran en funciones malloc()/free(), use la opción –vm N.
- Para asignar memoria por trabajador de máquina virtual, utilice la opción –vm-bytes N.
- En lugar de liberar y reasignar recursos de memoria, puede volver a ensuciar la memoria utilizando la opción –vm-keep.
- Establezca la suspensión en N segundos antes de liberar memoria usando la opción –vm-hang N.
- Para generar N trabajadores que giran en las funciones write()/unlink(), utilice la opción –hdd N.
- Puede establecer un tiempo de espera después de N segundos utilizando la opción –timeout N.
- Establezca un factor de espera de N microsegundos antes de que comience cualquier trabajo utilizando la opción –backoff N de la siguiente manera.
- Para mostrar información más detallada al ejecutar estrés, utiliza la opción -v.
- 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]