How to find and fix high CPU usage on a Mac
Fans spinning, a hot keyboard, battery dropping fast: something is pinning a core. Here's how to find the process, work out where it came from, and decide whether to wait, quit or kill it.
Updated
Find the process
In Activity Monitor, open the CPU tab and click the % CPU column so the busiest process is on top. Watch it for 10 seconds: a brief spike is normal, a process that stays high is your problem.
From Terminal, the same list:
top -o cpu -l 2 -n 10 -stats pid,command,cpu,time
The first top sample always reads 0%, so -l 2 takes two and the second is the real one. If you prefer a one-shot snapshot:
ps -Ao pid,pcpu,etime,comm -r | head -n 11
etime is how long the process has been running. A node process at 100% that started three days ago is a very different story from a build that started 30 seconds ago.
Work out where it came from
A name like node, python or Code Helper (Renderer) isn’t enough. Get the full command line and its folder:
ps -o pid,ppid,command -p 48211
lsof -a -p 48211 -d cwd -Fn | tail -1
Then walk the parent chain with ps -o ppid,command -p <ppid> until you reach a terminal, an editor or launchd (PID 1). A parent of 1 means the terminal that started it is gone, so nothing will stop it for you. That’s an orphaned process.
Is it normal?
Some high CPU is expected and temporary:
| Process | Why it’s busy | What to do |
|---|---|---|
mds_stores, mdworker | Spotlight indexing new files | Wait, or exclude build folders in System Settings › Spotlight |
kernel_task | macOS holding the CPU back to cool down | Fix the heat, see kernel_task |
photoanalysisd, mediaanalysisd | Photos scanning your library | Wait; it runs mostly when idle and plugged in |
softwareupdated | Preparing a macOS update | Wait or finish the update |
backupd | Time Machine | Wait for the backup to finish |
And some isn’t:
- A watcher (
tsc --watch,webpack,jest --watch) stuck in a rebuild loop. - A browser tab with a runaway script. In Chrome, Window › Task Manager shows which tab.
- An editor extension. In VS Code, run Developer: Show Running Extensions.
- Docker’s VM (
com.docker.virtualizationorVirtualization.VM) doing work for a container. Checkdocker stats.
Stop it
Try a normal quit first. For an app, use its menu or Activity Monitor › Quit. For a process:
kill 48211 # asks it to stop (SIGTERM)
kill -9 48211 # forces it (SIGKILL), only if the first didn't work
kill -9 gives the process no chance to save, so unsaved work in that app is lost. Never kill system processes such as WindowServer, launchd or kernel_task: macOS will log you out, restart them or refuse.
To kill everything matching a name, check what matches before you pull the trigger:
pgrep -lf "vite"
pkill -f "vite"
When high CPU keeps coming back
- Same app, every day: update it, then check its settings for sync or indexing options. Report it to the developer with a sample from Activity Monitor › (⋯) › Sample Process.
- After waking from sleep: iCloud, Photos and Spotlight catch up on what they missed. Give it 10 minutes.
- Only when hot: that’s throttling showing up as
kernel_task. See Mac thermal throttling. - Only with many apps open: you may be short on memory, not CPU. Check memory pressure.
Seeing it live
Stat Space shows CPU in the menu bar and, in the Apps tab, groups helpers into the app they belong to: Chrome’s renderers under Chrome, VS Code’s under VS Code. You see that the real cost is “Chrome, 240%” instead of 30 rows of Helper. Tap a process to see what it is and whether it’s safe to quit, then quit or force quit from there. The Agents tab finds dev processes orphaned after their terminal or coding agent closed.
Threshold notifications for CPU are free. Pro adds per-app alerts (“tell me if Slack stays above 50% for 5 minutes”) and spike rewind, which saves the top three processes each time CPU crosses a line, so you can see what it was even if you weren’t looking.
Questions
Why does a process show more than 100% CPU?
macOS counts 100% per core. A process using four cores fully shows 400%. Activity Monitor's CPU Load graph at the bottom shows the whole chip instead.
Is 100% CPU bad for an Apple Silicon Mac?
No. The chip is designed to run flat out and macOS manages heat. The cost is battery, fan noise and less headroom for the app you're actually using.
Why is WindowServer using so much CPU?
WindowServer draws everything on screen. It climbs with many displays, high refresh rates, transparency effects and apps that redraw constantly, such as a browser tab with animation. Closing that tab or app usually brings it down.
Know what your Mac is doing, without adding to it.
Free, no account. Pro is $9.99 once for the first 100 buyers.