Hvordan pålegge høy CPU-belastning og stresstest på Linux ved å bruke Stress-ng Tool


Som systemadministrator kan det være lurt å undersøke og overvåke statusen til Linux-systemene dine når de er under stress av høy belastning. Dette kan være en god måte for systemadministratorer og programmerere å:

  1. finjuster aktiviteter på et system.
  2. overvåk operativsystemets kjernegrensesnitt.
  3. test dine Linux-maskinvarekomponenter som CPU, minne, diskenheter og mange andre for å observere ytelsen deres under stress.
  4. mål forskjellige strømforbrukende belastninger på et system.

I denne guiden skal vi se på to viktige verktøy, stress og stress-ng for stresstesting under Linux-systemene dine.

1. stress – er et arbeidsbelastningsgeneratorverktøy designet for å utsette systemet ditt for et konfigurerbart mål på CPU, minne, I/O og diskbelastning.

2. stress-ng – er en oppdatert versjon av verktøyet for å generere stressarbeid som tester systemet for følgende funksjoner:

  1. CPU-beregning
  2. driv stress
  3. I/U-synkronisering
  4. Rør I/U
  5. cache thrashing
  6. VM-stress
  7. kontaktspenning
  8. prosessoppretting og avslutning
  9. egenskaper for kontekstbytte

Selv om disse verktøyene er gode for å undersøke systemet ditt, bør de ikke bare brukes av enhver systembruker.

Viktig: Det anbefales sterkt at du bruker disse verktøyene med root-brukerprivilegier, fordi de kan stresse Linux-maskinen din så raskt og for å unngå visse systemfeil på dårlig utformet maskinvare.

Hvordan installere stress-verktøyet i Linux

For å installere stressverktøy på Debian og dets derivater som Ubuntu og Mint, kjør følgende kommando.

$ sudo apt-get install stress

For å installere stress på en RHEL/CentOS og Fedora Linux, må du slå på EPEL-depot og deretter skrive inn følgende yum-kommando for å installere det samme:

# yum install stress

Den generelle syntaksen for bruk av stress er:

$ sudo stress option argument

Noen alternativer som du kan bruke med stress.

  1. For å skape N arbeidere som spinner på sqrt()-funksjonen, bruk –cpu N-alternativet som følger.
  2. For å skape N arbeidere som spinner på sync()-funksjonen, bruk –io N-alternativet som følger.
  3. For å skape N arbeidere som spinner på malloc()/free()-funksjoner, bruk –vm N-alternativet.
  4. For å tildele minne per vm-arbeider, bruk –vm-bytes N-alternativet.
  5. I stedet for å frigjøre og omfordele minneressurser, kan du skitne minnet på nytt ved å bruke –vm-keep-alternativet.
  6. Sett søvn til N sekunder før du frigjør minne ved å bruke –vm-hang N-alternativet.
  7. For å skape N arbeidere som spinner på write()/unlink()-funksjoner, bruk –hdd N-alternativet.
  8. Du kan angi et tidsavbrudd etter N sekunder ved å bruke alternativet –timeout N.
  9. Angi en ventefaktor på N mikrosekunder før noe arbeid starter ved å bruke –backoff N-alternativet som følger.
  10. For å vise mer detaljert informasjon når du løper stress, bruk alternativet -v.
  11. Bruk –hjelp for å se hjelp for bruk av stress eller se manpage.

1. For å undersøke effekten av kommandoen hver gang du kjører den, kjør først oppetidskommandoen og noter ned belastningsgjennomsnittet.

Deretter kjører du stress-kommandoen for å skape 8 arbeidere som spinner på sqrt() med en timeout på 20 sekunder. Etter å ha kjørt stress, kjør oppetidskommandoen igjen og sammenlign belastningsgjennomsnittet.

[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. For å skape 8 arbeidere som spinner på sqrt() med en timeout på 30 sekunder, og viser detaljert informasjon om operasjonen, kjør denne kommandoen:

[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. For å spwane en arbeider av malloc()- og free()-funksjoner med en timeout på 60 sekunder, kjør følgende kommando.

[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. For å spwane 4 arbeidere som spinner på sqrt(), 2 arbeidere som spwaner på sync(), 2 arbeidere på malloc()/free(), med en time out på 20 sekunder og tildele et minne på 256MB per vm-arbeider, kjør dette kommandoen nedenfor.

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