Mac Overheating with High CPU Usage: Diagnose and Fix from the Terminal
Find the process overheating your Mac with one-shot CPU snapshots, live monitors and disk/network tracing, then fix the cause and verify the machine cools down.
What this covers
A hot Mac with roaring fans is almost always one process working far too hard. This guide walks you from identifying the culprit to fixing the most common terminal-fixable causes and confirming the machine has cooled down.
Symptom
Take a one-shot CPU snapshot to find the culprit
When your Mac runs hot and the fans spin up, the first question is which process is burning CPU. A single sorted report gives you the top consumers instantly without watching a live screen. It worked if you can see one or two process names at the top of the list with high CPU percentages.
Print a single top-style report sorted by CPU instead of watching a live updating screen.
$ top -l 1 -o cpuSearch the full process list for suspicious names
Once you have a suspect process name from the snapshot, confirm it in the complete process list and note its exact PID. This also reveals helper or duplicate instances you might have missed. It worked if you get a line with the process name and a PID you can use in the next step.
Dump the complete process list and filter it for a keyword in one line.
$ ps aux | grep -i "<name>"Watch live CPU, memory and disk in one screen
If the one-shot snapshot is not conclusive — for example the load comes and goes — a live monitor lets you see spikes as they happen and correlate them with what you are doing. It worked if you can reproduce the heat-up and see which widget or process reacts at the same time.
Watch CPU, memory, disk, network and process widgets in one screen.
$ btmTrace what the busy process is actually doing on disk
A process pegging the CPU is often doing heavy filesystem work, like indexing or syncing thousands of files. Tracing its file activity tells you whether the load is legitimate work or a loop stuck on one folder. It worked if the trace shows the process reading or writing files, and you can judge whether that activity makes sense.
Watch every open, write, and stat call happening on your disks and see exactly which process made it.
$ sudo fs_usage -w -f filesys | grep -i DocumentsCheck whether the hot process is also chattering on the network
Cloud sync clients, backup agents and runaway update checks often combine high CPU with constant network traffic. A single per-process network report tells you if the culprit is talking to the internet nonstop. It worked if you can match the top talker to the CPU hog you identified earlier.
Monitor which processes are sending and receiving data, live, with the built-in nettop.
$ nettop -P -l 1Stop Finder from churning on network and USB drives
If your trace pointed at Finder constantly touching network shares or USB disks, hidden .DS_Store writes can keep the disk and CPU busy. Disabling those writes removes the churn. It worked if the defaults commands succeed and Finder stops hammering the external volume — verify with another CPU snapshot.
Write DSDontWriteNetworkStores and DSDontWriteUSBStores so Finder skips creating .DS_Store on non-local volumes.
$ defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true && defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true▾ Undo
$ defaults delete com.apple.desktopservices DSDontWriteNetworkStores && defaults delete com.apple.desktopservices DSDontWriteUSBStoresReview sleep and power settings that keep the Mac awake
Overheating is worse when the Mac never idles down. Reading the live power configuration shows whether aggressive wake settings or disabled sleep keep the CPU working around the clock. It worked if you can read the settings and spot anything that prevents normal sleep.
pmset -g custom prints the live sleep configuration separately for battery and charger.
$ pmset -g customConfirm the suspect process has settled down
After quitting or fixing the offending app, check that specific process again by its PID. A much smaller footprint — or the process being gone — confirms the problem source is addressed. Re-run the CPU snapshot as well; the machine should cool down and the fans quiet within minutes.
Report exactly how many kilobytes of physical memory a single process holds, without Activity Monitor.
$ ps -o pid,rss,comm -p <PID>How to confirm it worked
Re-check the suspect process by PID and take a fresh CPU snapshot: usage should be low, the chassis should cool and the fans should quiet within a few minutes.
Undo everything
Every command above can be reverted. Run these in order to undo all of it.
$ defaults delete com.apple.desktopservices DSDontWriteNetworkStores && defaults delete com.apple.desktopservices DSDontWriteUSBStoresReview before running — some steps may not be independent.
Sources
- top — display and update sorted information about processes (macOS)Evidence: The page documents -l for logging mode (one shot) and notes that -u is an alias equivalent to "-o cpu -O time", confirming -o cpu sorts by CPU usage.
- ps — process status (macOS)Evidence: The page documents the BSD flags that make up 'aux': -a (other users' processes), -u (user-oriented output with %CPU and %MEM), and -x (processes without a controlling terminal).
- macOS fs_usage — report system calls and page faults related to filesystem activityEvidence: Documents fs_usage's filesys filter, -w wide output and -f filter classes.
- top(1) man pageEvidence: The synopsis shows -l <samples> ("Use logging mode and display <samples> samples") and -o <key> for the sort-order column, with cpu as a valid key.
- bottom documentationEvidence: Official bottom docs covering widgets and flags.
- nettop(1) — display network activity by processEvidence: Documents nettop -P aggregating traffic per process and -l 1 taking a single sample instead of an animated display.
- PS(1) — macOS man pageEvidence: The BSD ps man page lists the -a, -u and -x options whose combination 'aux' shows every process on the system with CPU, memory and command columns.
- Homebrew formula: bottomEvidence: Installs bottom, which provides the btm binary.
Last verified: 2026-09-21
Related guides
Check battery health, hunt down CPU-hungry and sleep-blocking processes, and tune sleep settings to stop fast battery drain on macOS.
A terminal-first walkthrough to find what is holding your external disk open on macOS and eject it safely, from quitting apps to forcing an unmount.
Diagnose a stubborn Bluetooth device with system_profiler, then power-cycle Bluetooth and restart bluetoothd to get it connected again.