Getting cpu usage realtime
Solution 1:
If you can afford a delay of one second, this will print CPU usage as a simple percentage:
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
(Without the one-second delay, vmstat
can only print average values since boot.)
Solution 2:
This is a known issue with top
. As explained here, the 1st iteration of top -b
returns the percentages since boot, we therefore need at least two iterations (-n 2
) to get the current percentage. To speed things up, you can set the d
elay between iterations to 0.01
. top
splits CPU usage between user, system processes and nice
processes, we want the sum of the three. Finally, you grep
the line containing the CPU percentages and then use gawk
to sum user, system and nice processes:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Solution 3:
I have tried several ways, but this seems to me the most accurate:
cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'
Got it from here
Solution 4:
I needed CPU usage per core and used mpstat from the sysstat package.
sudo apt install sysstat
CPU0 Utilization in %:
echo 100 - $(mpstat -P 0 | tail -1 | awk '{print $13}') | bc
CPU1 Utilization in %:
echo 100 - $(mpstat -P 1 | tail -1 | awk '{print $13}') | bc
Change the -P X if you have more than 2 cores.