Hoe u een hoge CPU-belasting en stresstest op Linux kunt opleggen met behulp van de 'Stress-ng'-tool
Als systeembeheerder wilt u wellicht de status van uw Linux-systemen onderzoeken en controleren wanneer deze onder hoge belasting staan. Dit kan voor systeembeheerders en programmeurs een goede manier zijn om:
- activiteiten op een systeem nauwkeurig afstemmen.
- monitor de kernelinterfaces van het besturingssysteem.
- test uw Linux-hardwarecomponenten zoals CPU, geheugen, schijfapparaten en vele andere om hun prestaties onder stress te observeren.
- meet verschillende stroomverbruikende belastingen op een systeem.
In deze handleiding zullen we twee belangrijke tools bekijken, stress en stress-ng voor stresstests onder je Linux-systemen.
1. stress – is een werklastgenerator die is ontworpen om uw systeem te onderwerpen aan een configureerbare maatstaf voor CPU-, geheugen-, I/O- en schijfstress.
2. stress-ng – is een bijgewerkte versie van de tool voor het genereren van stress-werklast, die uw systeem test op de volgende functies:
- CPU-rekenkracht
- stress veroorzaken
- I/O-synchronisaties
- Pijp-I/O
- cache geselen
- VM-stress
- socket spanning
- procescreatie en -beëindiging
- contextomschakelingseigenschappen
Hoewel deze tools goed zijn voor het onderzoeken van uw systeem, mogen ze niet zomaar door elke systeemgebruiker worden gebruikt.
Belangrijk: het wordt ten zeerste aanbevolen dat u deze tools gebruikt met rootgebruikersrechten, omdat ze uw Linux-machine zo snel kunnen belasten en om bepaalde systeemfouten op slecht ontworpen hardware te voorkomen .
Hoe de ‘stress’-tool in Linux te installeren
Om de stresstool te installeren op Debian en zijn afgeleiden zoals Ubuntu en Mint, voert u de volgende opdracht uit.
sudo apt-get install stress
Om stress te installeren op een RHEL/CentOS en Fedora Linux, moet je de EPEL-repository inschakelen en vervolgens de volgende yum-opdracht typen om de dezelfde:
yum install stress
De algemene syntaxis voor het gebruik van stress is:
sudo stress option argument
Enkele opties die je kunt gebruiken bij stress.
- Om N werkers te spawnen die draaien op de sqrt() functie, gebruik je de –cpu N optie als volgt.
- Om N werkers te spawnen die draaien op de sync()-functie, gebruik je de –io N optie als volgt.
- Om N werkers te spawnen die draaien op malloc()/free() functies, gebruik je de –vm N optie.
- Om geheugen per VM-werker toe te wijzen, gebruikt u de optie –vm-bytes N.
- In plaats van geheugenbronnen vrij te maken en opnieuw toe te wijzen, kunt u het geheugen opnieuw vervuilen met behulp van de optie –vm-keep.
- Stel de slaapstand in op N seconden voordat u geheugen vrijmaakt met behulp van de optie –vm-hang N.
- Om N werkers te spawnen die draaien op write()/unlink() functies, gebruik je de –hdd N optie.
- U kunt na N seconden een time-out instellen met behulp van de optie –timeout N.
- Stel een wachtfactor van N microseconden in voordat enig werk begint door de optie –backoff N als volgt te gebruiken.
- Om meer gedetailleerde informatie te tonen bij het uitvoeren van stress, gebruik je de -v optie.
- Gebruik –help om hulp te bekijken voor het gebruik van stress of bekijk de manpagina.
Hoe gebruik ik stress op Linux-systemen?
1. Om het effect van de opdracht te onderzoeken elke keer dat u deze uitvoert, voert u eerst de opdracht uptime uit en noteert u de gemiddelde belasting.
Voer vervolgens de opdracht stress uit om 8 werkers te spawnen die op sqrt() draaien met een time-out van 20 seconden. Voer na het uitvoeren van stress opnieuw de opdracht uptime uit en vergelijk het gemiddelde van de belasting.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
tecmint@tecmint ~ $ uptime
Voorbeelduitvoer
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. Om 8 werkers te spawnen die op sqrt() draaien met een time-out van 30 seconden, waarbij gedetailleerde informatie over de bewerking wordt weergegeven, voert u deze opdracht uit:
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
Voorbeelduitvoer
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. Om één werker van de functies malloc() en free() te laten werken met een time-out van 60 seconden, voer de volgende opdracht uit.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
tecmint@tecmint ~ $ uptime
Voorbeelduitvoer
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. Om 4 werkers te laten draaien op sqrt(), 2 werkers die draaien op sync(), 2 werkers op malloc()/free(), met een time-out van 20 seconden en een geheugen toe te wijzen van 256 MB per VM-werker, voer deze opdracht hieronder uit.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
tecmint@tecmint ~ $ uptime
Voorbeelduitvoer
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]