Skip to content

Guide

Mac battery drain overnight: how to find the cause

A sleeping MacBook should lose very little charge overnight. If yours loses a lot, it either didn't really sleep or kept waking up. macOS logs both, and here is how to read them.

By the iKnowMyMac team · Updated · 8 min read

The short answer

Big overnight drain almost always means the Mac didn't stay asleep. Run pmset -g assertions to see which apps are preventing sleep right now, and pmset -g log | grep -i wake to see when and why it woke overnight. Quit the app holding the assertion, and if wakes are frequent, review Wake for network access and Power Nap in System Settings → Battery → Options.

On this page

Why a sleeping Mac loses battery

When a Mac sleeps properly it uses very little power. Large overnight losses have three usual causes:

  1. It never went to sleep. An app held a sleep assertion, for example a video call app, a download, a backup, or a virtual machine.
  2. It kept waking up. Macs wake briefly with the screen off for maintenance, called a dark wake. A few are normal; long or frequent ones add up.
  3. Something stayed busy while it was awake. Once awake, apps like container runtimes and sync clients can keep working for minutes each time.

Step 1: see what is preventing sleep right now

In Activity Monitor, open the Energy tab and look at the Preventing Sleep column. Anything marked Yes is holding the Mac awake at this moment. For more detail, use Terminal:

Sleep assertions, system-wide and by process
pmset -g assertions
Example output (shortened)
Assertion status system-wide:
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   PreventUserIdleSystemSleep     1
Listed by owning process:
   pid 32754(Zoom): [...] 01:12:40 PreventUserIdleSystemSleep named: "Meeting in progress"

The lines under Listed by owning process are what matter: the app, how long it has held the assertion, and its type. PreventUserIdleSystemSleep keeps the Mac awake; PreventUserIdleDisplaySleep keeps the screen on. An assertion held for hours by an app you're not using is your answer.

Step 2: see when and why it woke

The power log keeps a record of every sleep and wake. It is long, so filter it:

Wake events from the power log
pmset -g log | grep -E "(Wake|DarkWake|Sleep) " | tail -40
Example lines (shortened)
10:30:45 DarkWake  DarkWake from Deep Idle [CDNP] : due to ... wifibt ... Using BATT (Charge:100%) 45 secs
10:31:30 Sleep     Entering Sleep state due to 'Maintenance Sleep':TCPKeepAlive=active ...
10:32:54 Wake      DarkWake to FullWake from Deep Idle [CDNVA] : due to HID Activity ...

Each DarkWake line says why the Mac woke (“due to …”) and how long it stayed up. Wake lines are full wakes, such as opening the lid. Look for long dark wakes, or dark wakes every few minutes, and note the battery charge the lines report.

How many sleeps and wakes since boot
pmset -g stats

pmset -g stats counts sleeps, dark wakes and user wakes. A dark wake count far above the sleep count you'd expect is a sign something is waking the Mac repeatedly.

Step 3: check the settings that allow wakes

Current power settings
pmset -g

Look at powernap, tcpkeepalive and womp (wake on network access). The same line for sleep also names the processes currently preventing sleep. In System Settings → Battery → Options you can change the related settings; which options appear depends on your Mac and macOS version.

Common culprits

  • Virtual machines and container runtimes (Docker, OrbStack, Colima) can hold assertions or keep network activity going.
  • Video call apps left in a meeting or on a waiting screen.
  • Downloads, backups and sync clients that ask the Mac to stay awake until they finish.
  • Browser tabs playing media, even muted.
  • Accessories and displays that wake the Mac when they reconnect.

Step 4: measure the next night

Note the battery percentage before you close the lid (pmset -g batt shows it), fix one thing, and compare in the morning. For battery health, System Settings → Battery → Battery Health shows maximum capacity, and system_profiler SPPowerDataType shows the cycle count.

The faster way: Sleep & Battery in iKnowMyMac

iKnowMyMac records sleep assertions as they happen, reads the wake log through its optional read-only helper, and turns the night into one line in the morning.

Know why your Mac is slow.

macOS 15 Sequoia or later · Apple silicon. A 4.2 MB native app, notarized by Apple. No account, no analytics, no telemetry.

One-time purchase · every feature · 14-day refund