Wyszukiwanie w witrynie

Jak narzucić wysokie obciążenie procesora i test obciążeniowy w systemie Linux za pomocą narzędzia „Stress-ng”.


Jako administrator systemu możesz chcieć sprawdzać i monitorować stan swoich systemów Linux, gdy są one poddawane dużemu obciążeniu. Może to być dobry sposób dla administratorów systemów i programistów na:

  1. dostroić działania w systemie.
  2. monitoruj interfejsy jądra systemu operacyjnego.
  3. przetestuj komponenty sprzętowe systemu Linux, takie jak procesor, pamięć, urządzenia dyskowe i wiele innych, aby obserwować ich wydajność pod obciążeniem.
  4. mierzyć różne obciążenia pobierające energię w systemie.

W tym przewodniku przyjrzymy się dwóm ważnym narzędziom, stres i stres-ng, służącym do testowania warunków skrajnych w systemach Linux.

1. stres – to narzędzie do generowania obciążenia, którego zadaniem jest poddawanie systemu konfigurowalnej mierze obciążenia procesora, pamięci, wejść/wyjść i dysku.

2. stress-ng – to zaktualizowana wersja narzędzia do generowania obciążenia stresowego, które testuje Twój system pod kątem następujących funkcji:

  1. Obliczenia procesora
  2. stres napędowy
  3. Synchronizacja wejść/wyjść
  4. We/wy rurowe
  5. niszczenie pamięci podręcznej
  6. Stres maszyny wirtualnej
  7. naprężenie gniazda
  8. tworzenie i kończenie procesów
  9. właściwości przełączania kontekstu

Chociaż narzędzia te są dobre do sprawdzania systemu, nie powinien być używany tylko przez dowolnego użytkownika systemu.

Ważne: zdecydowanie zaleca się używanie tych narzędzi z uprawnieniami użytkownika root, ponieważ mogą one szybko obciążyć komputer z systemem Linux i uniknąć pewnych błędów systemowych na źle zaprojektowanym sprzęcie .

Jak zainstalować narzędzie „stres” w systemie Linux

Aby zainstalować narzędzie do sprawdzania stresu na Debianie i jego pochodnych, takich jak Ubuntu i Mint, uruchom następujące polecenie.

sudo apt-get install stress

Aby zainstalować stres na RHEL/CentOS i Fedora Linux, musisz włączyć repozytorium EPEL, a następnie wpisać następujące polecenie yum, aby zainstalować To samo:

yum install stress

Ogólna składnia użycia słowa stres jest następująca:

sudo stress option argument

Niektóre opcje, których możesz użyć w przypadku stresu.

  1. Aby utworzyć N procesów roboczych korzystających z funkcji sqrt(), użyj opcji –cpu N w następujący sposób.
  2. Aby odrodzić N pracowników obracających się przy funkcji sync(), użyj opcji –io N w następujący sposób.
  3. Aby utworzyć N procesów roboczych korzystających z funkcji malloc()/free(), użyj opcji –vm N.
  4. Aby przydzielić pamięć na proces roboczy maszyny wirtualnej, użyj opcji –vm-bytes N.
  5. Zamiast zwalniać i ponownie przydzielać zasoby pamięci, możesz ponownie zabrudzić pamięć, używając opcji –vm-keep.
  6. Ustaw tryb uśpienia na N sekund przed zwolnieniem pamięci, używając opcji –vm-hang N.
  7. Aby spawnować N pracowników korzystających z funkcji write()/unlink(), użyj opcji –hdd N.
  8. Możesz ustawić limit czasu po N sekundach, używając opcji –limit czasu N.
  9. Ustaw współczynnik oczekiwania N mikrosekund przed rozpoczęciem jakiejkolwiek pracy, używając opcji –backoff N w następujący sposób.
  10. Aby wyświetlić bardziej szczegółowe informacje podczas uruchamiania obciążenia, użyj opcji -v.
  11. Użyj –help, aby wyświetlić pomoc dotyczącą używania stresu lub wyświetlić stronę podręcznika.

Jak używać stresu w systemach Linux?

1. Aby sprawdzić efekt polecenia przy każdym jego uruchomieniu, najpierw uruchom polecenie czas pracy i zanotuj średnie obciążenie.

Następnie uruchom polecenie stres, aby odrodzić 8 pracowników obracających się w sqrt() z limitem czasu wynoszącym 20 sekund. Po uruchomieniu obciążenia ponownie uruchom polecenie uptime i porównaj średnie obciążenie.


tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu  8 --timeout 20
tecmint@tecmint ~ $ uptime
Przykładowe wyjście
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. Aby odrodzić 8 procesów roboczych wirujących w funkcji sqrt() z limitem czasu wynoszącym 30 sekund, pokazując szczegółowe informacje o operacji, uruchom tę komendę:

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
Przykładowe wyjście
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. Aby połączyć jeden proces roboczy funkcji malloc() i free() z limitem czasu wynoszącym 60 sekund, uruchom następujące polecenie.

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s 
tecmint@tecmint ~ $ uptime
Przykładowe wyjście
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. Aby połączyć 4 procesy robocze w sqrt(), 2 procesy robocze w sync(), 2 procesy robocze w malloc()/free() z czasem nie większym niż 20 sekund i przydzielić pamięć 256 MB na pracownika wirtualnego, uruchom poniższe polecenie.

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s 
tecmint@tecmint ~ $ uptime
Przykładowe wyjście
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]