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 å:
- finjuster aktiviteter på et system.
- overvåk operativsystemets kjernegrensesnitt.
- test dine Linux-maskinvarekomponenter som CPU, minne, diskenheter og mange andre for å observere ytelsen deres under stress.
- 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:
- CPU-beregning
- driv stress
- I/U-synkronisering
- Rør I/U
- cache thrashing
- VM-stress
- kontaktspenning
- prosessoppretting og avslutning
- 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.
- For å skape N arbeidere som spinner på sqrt()-funksjonen, bruk –cpu N-alternativet som følger.
- For å skape N arbeidere som spinner på sync()-funksjonen, bruk –io N-alternativet som følger.
- For å skape N arbeidere som spinner på malloc()/free()-funksjoner, bruk –vm N-alternativet.
- For å tildele minne per vm-arbeider, bruk –vm-bytes N-alternativet.
- I stedet for å frigjøre og omfordele minneressurser, kan du skitne minnet på nytt ved å bruke –vm-keep-alternativet.
- Sett søvn til N sekunder før du frigjør minne ved å bruke –vm-hang N-alternativet.
- For å skape N arbeidere som spinner på write()/unlink()-funksjoner, bruk –hdd N-alternativet.
- Du kan angi et tidsavbrudd etter N sekunder ved å bruke alternativet –timeout N.
- Angi en ventefaktor på N mikrosekunder før noe arbeid starter ved å bruke –backoff N-alternativet som følger.
- For å vise mer detaljert informasjon når du løper stress, bruk alternativet -v.
- 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]