Mac Performance Guide

Why a Mac process shows more than 100% CPU

Short answer

On a Mac, the % CPU for a process in top, ps, htop and Activity Monitor is counted per core: 100% means one core fully busy. A process with several busy threads can show 200%, 400% or more. The ceiling is 100% times the number of cores. It is not a bug, and on its own it is not a problem.

How many cores your Mac has

sysctl hw.ncpu hw.physicalcpu hw.logicalcpu
hw.ncpu: 16
hw.physicalcpu: 16
hw.logicalcpu: 16

This M4 Max has 16 cores, so one process can reach 1600%. Apple Silicon has no hyperthreading, so the physical and logical counts match. On an Intel Mac with Hyper-Threading, hw.logicalcpu is twice hw.physicalcpu, and the percentages count logical CPUs.

On Apple Silicon you can also see the split between performance and efficiency cores:

sysctl hw.perflevel0.name hw.perflevel0.physicalcpu hw.perflevel1.name hw.perflevel1.physicalcpu
hw.perflevel0.name: Performance
hw.perflevel0.physicalcpu: 12
hw.perflevel1.name: Efficiency
hw.perflevel1.physicalcpu: 4

See it for yourself

Here a small test program starts four threads that each spin on one core. ps sorted by CPU (-r) shows it near 400%:

ps -axo pid,%cpu,comm -r | head -5
  PID  %CPU COMM
48174 397.6 ./spin4

ps -M breaks a process down by thread. Replace 12345 with the PID from the list:

ps -M -p 12345
USER     PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
suresk 48174   ??    0.0 S    31T   0:00.00   0:00.00 ./spin4 4
       48174       100.0 R    31T   0:00.01   0:04.08
       48174        98.5 R    31T   0:00.01   0:04.07
       48174       100.0 R    31T   0:00.01   0:04.07
       48174        99.1 R    31T   0:00.01   0:04.07 

Four threads at about 100% each add up to about 400%. The main thread is asleep. top agrees (this was a second run, so the PID differs); its #TH column shows 5 threads, 4 of them running:

top -l 2 -s 3 -pid 12345 -stats pid,command,cpu,th
PID    COMMAND %CPU  #TH
47044  spin4   400.1 5/4

As always with top -l, read the last sample: the first one is printed before there is anything to compare against.

% CPU vs the CPU Load graph

Activity Monitor uses both scales in one window, which is where the confusion usually starts:

To see the cores one by one, choose Window > CPU Usage or Window > CPU History in Activity Monitor.

Irix mode and how to get a 0–100% number

Per-core percentages are called "Irix mode", after the Unix that used them; dividing by the number of cores is "Solaris mode". On Linux, top switches between them with the I key. macOS's top has no such toggle, and Activity Monitor has no setting for it: both always show per-core numbers.

htop also shows per-core CPU% by default, but it has a second column, NCPU%, that is normalized by the number of CPUs. Add it from Setup (F2) > Screens. For a quick one-off, divide by hw.ncpu yourself: 400% on a 16-core Mac is 25% of the machine.

When it matters

A compiler, video export or a game using several cores is doing what you asked. It is worth a look when a process sits at hundreds of percent while you are not asking it to do anything, such as a browser tab or a background helper; that is the battery and the heat. If the whole Mac slows down while it happens, check whether it is also thermal throttling.

The easier way: GaugeMon

GaugeMon shows both scales without the confusion: the CPU gauge in the menu bar is the whole Mac from 0 to 100%, or per-core bars if you prefer, and its Processes window has an htop-style % CPU column per process, with per-core meters and load average above it. Click the CPU gauge for the P-core and E-core split and the top processes.

GaugeMon's Processes window with per-core meters and load average above a table of processes sorted by CPU
Download GaugeMon free trial Learn more

Related guides