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:
- dostroić działania w systemie.
- monitoruj interfejsy jądra systemu operacyjnego.
- przetestuj komponenty sprzętowe systemu Linux, takie jak procesor, pamięć, urządzenia dyskowe i wiele innych, aby obserwować ich wydajność pod obciążeniem.
- 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:
- Obliczenia procesora
- stres napędowy
- Synchronizacja wejść/wyjść
- We/wy rurowe
- niszczenie pamięci podręcznej
- Stres maszyny wirtualnej
- naprężenie gniazda
- tworzenie i kończenie procesów
- 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.
- Aby utworzyć N procesów roboczych korzystających z funkcji sqrt(), użyj opcji –cpu N w następujący sposób.
- Aby odrodzić N pracowników obracających się przy funkcji sync(), użyj opcji –io N w następujący sposób.
- Aby utworzyć N procesów roboczych korzystających z funkcji malloc()/free(), użyj opcji –vm N.
- Aby przydzielić pamięć na proces roboczy maszyny wirtualnej, użyj opcji –vm-bytes N.
- Zamiast zwalniać i ponownie przydzielać zasoby pamięci, możesz ponownie zabrudzić pamięć, używając opcji –vm-keep.
- Ustaw tryb uśpienia na N sekund przed zwolnieniem pamięci, używając opcji –vm-hang N.
- Aby spawnować N pracowników korzystających z funkcji write()/unlink(), użyj opcji –hdd N.
- Możesz ustawić limit czasu po N sekundach, używając opcji –limit czasu N.
- Ustaw współczynnik oczekiwania N mikrosekund przed rozpoczęciem jakiejkolwiek pracy, używając opcji –backoff N w następujący sposób.
- Aby wyświetlić bardziej szczegółowe informacje podczas uruchamiania obciążenia, użyj opcji -v.
- 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]