I have ubuntu running on a multi-core CPU with 32 cores. When I check the cpu usage using top command, sometime it shows more than 100 %, like 340%, 650% etc. I did some investigation and found that its actually a sum of usages across different cores. For example if 1st cpu usages is 20% , 2nd is 30%, 3rd is 40% and remaining are 0% then ‘top’ shows 20+30+40=90%.
Its bit confusing and misleading. I believe the top command should display the CPU usages between 0 to 100 by calculating the usages across all the cores. In my example above, I would expect -(90*100)/3200 =2.8125% . Is this a bug with top command ? should it be considered as an enhancement for future releases? please advise
33 Answers
By default, top displays CPU usage as a percentage of a single CPU. On multi-core systems, you can see percentages of CPU usage are greater than 100%. You can toggle this behavior by hitting Shift + i while top is running to show the overall percentage of available CPUs in use.
htop is a better alternative of top. In htop, you can see how your programs consuming all of the 32 cores.
looks like I found a way :-) if I switch to solaris mode while running the top command it shows the correct cpu usage. To switch to the solaris mode first run the top command then press shift+i
reference articles
0- You have to use the "-H" option to get the actual CPU usage of threads. Let's take I have a program "load", this program creates three threads. Each thread is in an infinite loop to make CPU utilization 100%.
- Here parent has ID = 181906, thread-1 ID = 181907, thread-2 ID = 181908 and thread-3 ID = 181909.
- Using the top command, I see load with ID = 181906 has 300% CPU.
- After using top -H -p 181906 then, load ID = 181906 0 %CPU thread1 ID = 181907 99 %CPU thread2 ID = 181908 99 %CPU thread3 ID = 181909 99 %CPU
So, final word, use the -H option along with the top -p option to get actual CPU utilization.