Performance & memory

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.

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:

ProcessWhy it’s busyWhat to do
mds_stores, mdworkerSpotlight indexing new filesWait, or exclude build folders in System Settings › Spotlight
kernel_taskmacOS holding the CPU back to cool downFix the heat, see kernel_task
photoanalysisd, mediaanalysisdPhotos scanning your libraryWait; it runs mostly when idle and plugged in
softwareupdatedPreparing a macOS updateWait or finish the update
backupdTime MachineWait 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.virtualization or Virtualization.VM) doing work for a container. Check docker 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.

Get started

Know what your Mac is doing, without adding to it.

Free, no account. Pro is $9.99 once for the first 100 buyers.