Mac Performance Guide

Mac fans loud but Activity Monitor shows nothing

Short answer

Fans respond to heat, and heat lags the work that caused it. By the time you open Activity Monitor the process that heated the Mac has usually finished, or the load is on the GPU, which the CPU tab does not show at all. Check whether macOS thinks the Mac is hot, sample top twice to catch short bursts, read GPU utilization, then rule out the external display, the charger and blocked vents. None of it needs sudo.

Step 1: is the Mac actually hot?

Two commands say whether macOS has registered heat, as opposed to the fan simply being audible:

pmset -g therm
Note: No thermal warning level has been recorded
Note: No performance warning level has been recorded
osascript -l JavaScript -e 'ObjC.import("Foundation"); $.NSProcessInfo.processInfo.thermalState'
0

That is an M4 Max MacBook Pro at idle. The thermal state goes 0 nominal, 1 fair (Apple's own description: fans may become audible), 2 serious, 3 critical. If yours prints 1 or more, the fans are doing their job and the question is what made the heat. If it prints 0, the Mac has already cooled and the fans are winding down, or something other than load is driving them (steps 5 and 6). Check if your Mac is thermal throttling covers what these commands report on Intel.

Step 2: the process already finished

Activity Monitor refreshes every five seconds by default and shows only the current sample. A Spotlight burst after a download, a Time Machine backup, Photos analysing a library, an Xcode index or an MDM agent's scan can push several cores for two minutes, and the fans keep running for a minute or more after it stops. Sample top twice; the first sample of top -l reports 0.0% for everything, so always ask for two:

top -l 2 -n 8 -o cpu -stats pid,command,cpu | tail -9
PID    COMMAND          %CPU
43472  io.kandji.Kandji 24.7
558    mds              24.0
61057  mds_stores       23.0
0      kernel_task      16.3
606    WindowServer     15.9
55036  2.1.295          14.8
58205  top              8.8
39849  trustd           7.3

On this Mac, a device-management agent and Spotlight were the burst. Thirty seconds later all three were back at zero, which is exactly the "nothing in Activity Monitor" experience. Two more ways to see what was busy a moment ago:

Step 3: the load is on the GPU

The CPU tab says nothing about the GPU, and on Apple Silicon the GPU shares the same chip and the same cooling. A video call, screen sharing, a page full of WebGL or canvas animation, a video export, a local ML model or a game can keep the GPU busy with low CPU numbers. Activity Monitor shows it under Window > GPU History; the terminal can read the same counter without sudo:

ioreg -rc IOAccelerator | grep -o '"Device Utilization %"=[0-9]*'
"Device Utilization %"=5

A number that stays above 50 while nothing is obviously running is your answer. See Check GPU usage on a Mac for finding the process.

Step 4: the external display and clamshell mode

Every frame on every display is composed by WindowServer and drawn by the GPU, and a 5K or ultrawide display at a high refresh rate is a constant background load that is easy to forget. List what is connected:

system_profiler SPDisplaysDataType | grep -E 'Display Type|Resolution'
          Resolution: 5120 x 1440
          Display Type: Built-in Liquid Retina XDR Display
          Resolution: 3456 x 2234 Retina

In clamshell mode the lid traps the top case's heat and the fans have to do all the cooling, so the same load runs warmer than it does with the lid open. If the fans are loud only when docked, try the lid open or a lower refresh rate. WindowServer high CPU on Mac goes into what makes drawing expensive.

Step 5: charging

Fast charging a MacBook from a low battery produces heat in the battery, which sits right next to the logic board, and the fans may run with an empty CPU tab until the charge passes about 80%. Check:

pmset -g batt
Now drawing from 'AC Power'
 -InternalBattery-0 (id=35586147)	100%; charged; 0:00 remaining present: true
pmset -g ac | grep -E 'Wattage|Adapter Name'
 Wattage = 140W
 Adapter Name = 140W USB-C Power Adapter

If the battery is charging and warm, wait it out. Charging during a long build or export is the worst case; plug in before it, not during.

Step 6: vents, dust and the SMC

The easier way: GaugeMon

GaugeMon keeps Temperature, Fans, GPU and CPU in the menu bar, read from the sensors, the SMC and IOKit without sudo. Click any gauge for a chart of the last 10 minutes, so the burst that ended before you could open Activity Monitor is still on screen, with the top processes for that gauge. The Processes window has a Power column in watts, which is what makes heat; the optional helper fills it in for root's daemons too.

GaugeMon's Overview window with CPU, GPU, memory, power, temperature and fan cards, each with a chart
Download GaugeMon free trial Learn more

Related guides