Zoeken op website

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:

  1. activiteiten op een systeem nauwkeurig afstemmen.
  2. monitor de kernelinterfaces van het besturingssysteem.
  3. test uw Linux-hardwarecomponenten zoals CPU, geheugen, schijfapparaten en vele andere om hun prestaties onder stress te observeren.
  4. 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:

  1. CPU-rekenkracht
  2. stress veroorzaken
  3. I/O-synchronisaties
  4. Pijp-I/O
  5. cache geselen
  6. VM-stress
  7. socket spanning
  8. procescreatie en -beëindiging
  9. 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.

  1. Om N werkers te spawnen die draaien op de sqrt() functie, gebruik je de –cpu N optie als volgt.
  2. Om N werkers te spawnen die draaien op de sync()-functie, gebruik je de –io N optie als volgt.
  3. Om N werkers te spawnen die draaien op malloc()/free() functies, gebruik je de –vm N optie.
  4. Om geheugen per VM-werker toe te wijzen, gebruikt u de optie –vm-bytes N.
  5. 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.
  6. Stel de slaapstand in op N seconden voordat u geheugen vrijmaakt met behulp van de optie –vm-hang N.
  7. Om N werkers te spawnen die draaien op write()/unlink() functies, gebruik je de –hdd N optie.
  8. U kunt na N seconden een time-out instellen met behulp van de optie –timeout N.
  9. Stel een wachtfactor van N microseconden in voordat enig werk begint door de optie –backoff N als volgt te gebruiken.
  10. Om meer gedetailleerde informatie te tonen bij het uitvoeren van stress, gebruik je de -v optie.
  11. 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]