Come imporre un carico elevato della CPU e uno stress test su Linux utilizzando lo strumento "Stress-ng".
In qualità di amministratore di sistema, potresti voler esaminare e monitorare lo stato dei tuoi sistemi Linux quando sono sottoposti a stress da carico elevato. Questo può essere un buon modo per gli amministratori di sistema e i programmatori di:
- ottimizzare le attività su un sistema.
- monitorare le interfacce del kernel del sistema operativo.
- testa i tuoi componenti hardware Linux come CPU, memoria, dispositivi disco e molti altri per osservare le loro prestazioni sotto stress.
- misurare diversi carichi che consumano energia su un sistema.
In questa guida, esamineremo due importanti strumenti, stress e stress-ng per eseguire test di stress sui vostri sistemi Linux.
1. stress: è uno strumento di generazione del carico di lavoro progettato per sottoporre il sistema a una misura configurabile di stress di CPU, memoria, I/O e disco.
2. stress-ng: è una versione aggiornata dello strumento di generazione del carico di lavoro di stress che testa il tuo sistema per le seguenti funzionalità:
- Calcolo della CPU
- guidare lo stress
- Sincronizzazioni I/O
- I/O del tubo
- distruzione della cache
- Stress della VM
- sollecitazione della presa
- creazione e conclusione del processo
- proprietà di cambio di contesto
Sebbene questi strumenti siano utili per esaminare il tuo sistema, non dovrebbero essere utilizzati solo da qualsiasi utente del sistema.
Importante: si consiglia vivamente di utilizzare questi strumenti con privilegi di utente root, perché possono stressare la macchina Linux molto velocemente e per evitare alcuni errori di sistema su hardware mal progettato .
Come installare lo strumento "stress" in Linux
Per installare lo strumento stress su Debian e i suoi derivati come Ubuntu e Mint, esegui il seguente comando.
sudo apt-get install stress
Per installare stress su RHEL/CentOS e Fedora Linux, è necessario attivare il repository EPEL e quindi digitare il seguente comando yum per installare il Stesso:
yum install stress
La sintassi generale per usare stress è:
sudo stress option argument
Alcune opzioni che puoi utilizzare con stress.
- Per generare N lavoratori che girano sulla funzione sqrt(), utilizzare l'opzione –cpu N come segue.
- Per generare N lavoratori che ruotano sulla funzione sync(), utilizzare l'opzione –io N come segue.
- Per generare N lavoratori che ruotano sulle funzioni malloc()/free(), utilizzare l'opzione –vm N.
- Per allocare memoria per VM Worker, utilizza l'opzione –vm-bytes N.
- Invece di liberare e riallocare le risorse di memoria, puoi sporcare nuovamente la memoria utilizzando l'opzione –vm-keep.
- Imposta la sospensione su N secondi prima di liberare la memoria utilizzando l'opzione –vm-hang N.
- Per generare N lavoratori che girano sulle funzioni write()/unlink(), utilizza l'opzione –hdd N.
- Puoi impostare un timeout dopo N secondi utilizzando l'opzione –timeout N.
- Imposta un fattore di attesa di N microsecondi prima dell'inizio di qualsiasi lavoro utilizzando l'opzione –backoff N come segue.
- Per mostrare informazioni più dettagliate durante l'esecuzione dello stress, utilizza l'opzione -v.
- Utilizza –help per visualizzare la guida sull'utilizzo di stress o visualizzare la pagina man.
Come utilizzo lo stress sui sistemi Linux?
1. Per esaminare l'effetto del comando ogni volta che lo esegui, esegui prima il comando uptime e annota il carico medio.
Successivamente, esegui il comando stress per generare 8 lavoratori che ruotano su sqrt() con un timeout di 20 secondi. Dopo aver eseguito stress, esegui nuovamente il comando uptime e confronta il carico medio.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
tecmint@tecmint ~ $ uptime
Uscita del campione
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. Per generare 8 lavoratori che girano su sqrt() con un timeout di 30 secondi, mostrando informazioni dettagliate sull'operazione, esegui questo comando:
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
Uscita del campione
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. Per espandere un lavoratore delle funzioni malloc() e free() con un timeout di 60 secondi, eseguire il seguente comando.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s
tecmint@tecmint ~ $ uptime
Uscita del campione
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. Per spwanare 4 lavoratori che girano su sqrt(), 2 lavoratori che girano su sync(), 2 lavoratori su malloc()/free(), con un timeout di 20 secondi e allocare una memoria di 256 MB per lavoratore VM, esegui questo comando di seguito.
tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
tecmint@tecmint ~ $ uptime
Uscita del campione
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]