Com imposar una càrrega elevada de la CPU i una prova d'estrès a Linux mitjançant l'eina Stress-ng


Com a administrador del sistema, és possible que vulgueu examinar i supervisar l'estat dels vostres sistemes Linux quan estan sota estrès de càrrega elevada. Aquesta pot ser una bona manera per als administradors de sistemes i programadors de:

  1. ajustar les activitats d'un sistema.
  2. controlar les interfícies del nucli del sistema operatiu.
  3. Proveu els vostres components de maquinari Linux com ara CPU, memòria, dispositius de disc i molts altres per observar-ne el rendiment sota estrès.
  4. mesura diferents càrregues que consumeixen energia en un sistema.

En aquesta guia, veurem dues eines importants, stress i stress-ng per a proves d'estrès als vostres sistemes Linux.

1. estrès: és una eina generadora de càrrega de treball dissenyada per sotmetre el vostre sistema a una mesura configurable de la CPU, la memòria, l'E/S i l'estrès del disc.

2. stress-ng: és una versió actualitzada de l'eina generadora de càrrega de treball d'estrès que prova el vostre sistema per a les funcions següents:

  1. CPU de càlcul
  2. condueix l'estrès
  3. Sincronitzacions d'E/S
  4. E/S de canonades
  5. Trecció de la memòria cau
  6. Estrès VM
  7. estressament del sòcol
  8. creació i finalització del procés
  9. propietats de canvi de context

Tot i que aquestes eines són bones per examinar el vostre sistema, no només les hauria de fer servir qualsevol usuari del sistema.

Important: és molt recomanable que utilitzeu aquestes eines amb privilegis d'usuari root, perquè poden estresar la vostra màquina Linux tan ràpidament i per evitar certs errors del sistema en maquinari mal dissenyat.

Com instal·lar l'eina estrès a Linux

Per instal·lar l'eina d'estrès a Debian i els seus derivats com Ubuntu i Mint, executeu l'ordre següent.

$ sudo apt-get install stress

Per instal·lar l'estrès en un RHEL/CentOS i Fedora Linux, heu d'activar el repositori EPEL i, a continuació, escriviu la següent comanda yum per instal·lar-lo:

# yum install stress

La sintaxi general per utilitzar l'accent és:

$ sudo stress option argument

Algunes opcions que podeu utilitzar amb estrès.

  1. Per generar N treballadors que giren a la funció sqrt(), utilitzeu l'opció –cpu N de la manera següent.
  2. Per generar N treballadors que giren a la funció sync(), utilitzeu l'opció –io N de la manera següent.
  3. Per generar N treballadors que giren a les funcions malloc()/free(), utilitzeu l'opció –vm N.
  4. Per assignar memòria per treballador de vm, utilitzeu l'opció –vm-bytes N.
  5. En lloc d'alliberar i reassignar recursos de memòria, podeu tornar a embrutar la memòria utilitzant l'opció –vm-keep.
  6. Configura la repòs a N segons abans d'alliberar memòria mitjançant l'opció –vm-hang N.
  7. Per generar N treballadors que giren a les funcions write()/unlink(), utilitzeu l'opció –hdd N.
  8. Podeu establir un temps d'espera després de N segons utilitzant l'opció –timeout N.
  9. Definiu un factor d'espera de N microsegons abans que comenci qualsevol treball utilitzant l'opció –backoff N de la manera següent.
  10. Per mostrar informació més detallada quan feu estrès, feu servir l'opció -v.
  11. Utilitzeu –help per veure l'ajuda per utilitzar l'estrès o veure la pàgina de manual.

1. Per examinar l'efecte de l'ordre cada vegada que l'executeu, primer executeu l'ordre uptime i anoteu la mitjana de càrrega.

A continuació, executeu l'ordre d'estrès per generar 8 treballadors que giren a sqrt() amb un temps d'espera de 20 segons. Després d'executar l'estrès, torneu a executar l'ordre d'activitat i compareu la mitjana de càrrega.

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

2. Per generar 8 treballadors que giren a sqrt() amb un temps d'espera de 30 segons, mostrant informació detallada sobre l'operació, executeu aquesta ordre:

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

3. Per crear un treballador de les funcions malloc() i free() amb un temps d'espera de 60 segons, executeu l'ordre següent.

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

4. Per crear 4 treballadors que giren a sqrt(), 2 treballadors que fan sincronització(), 2 treballadors a malloc()/free(), amb un temps fora de 20 segons i assignar una memòria de 256 MB per treballador de vm, executeu-ho comanda a continuació.

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