MacOS – Battery Drain on MacBook Pro (2018) on Catalina when sleeping

batterycatalinamacbook promacossleep-wake

I've noticed insane battery drain on my MBP since moving to Catalina, even with the new .1 release installed.

E.g. Last night put the machine to sleep, nothing running, no rogue processes in activity monitor, no active apps, 44% battery, this morning it was down to 2% (7 hours later).

Any ideas? I've trying zapping the PRAM and SMC, many many reboots and of course installed 10.15.1 as soon as it was released.

The only thing I really see in the logs is:

Nov  1 13:08:14 MBP xpcproxy[39290]: libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port

This is repeated over and over during sleep.

Weird af.

I have dug a fair bit on this, and I'm a developer, I can't figure it out.

This is what I see when I close the lid…

default    13:53:02.324671+0000    kernel    PMRD: clamshell closed 1, disabled 0, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:02.324675+0000    kernel    PMRD: clamshell closed 1, disabled 0, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:02.325038+0000    kernel    PMRD: clamshell closed 1, disabled 0, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:02.325215+0000    kernel    PMRD: user inactive 0 min, time to idle sleep 30 min
default    13:53:02.326066+0000    kernel    PMRD: SleepWake UUID cleared
default    13:53:02.326221+0000    kernel    PMRD: sleep reason Clamshell Sleep
default    13:53:02.326755+0000    kernel    PMRD: prevent idle sleep list: IODisplayWrangler- (0)
default    13:53:02.325859+0000    sharingd    Clamshell change detected (clamshell closed: YES, clamshell sleep on close: YES)
default    13:53:02.325103+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=1, shouldSleepWhenClosed=2
default    13:53:02.325808+0000    powerd    vm.darkwake_mode: 0 -> 0
default    13:53:02.325563+0000    loginwindow    RegisterSleepWakeCallback_block_invoke | IOPMScheduleUserActiveChangedNotification received:0
default    13:53:02.340475+0000    kernel    PMRD: SleepWake UUID queued: FE56E0B3-79A0-4149-B16C-2757978A6E68
default    13:53:02.340594+0000    kernel    PMRD: SleepWake UUID queued: 0E8E3E06-B13D-4B6D-83AF-E2B5980995FF
default    13:53:02.340878+0000    hidd    system will go to sleep
default    13:53:02.340678+0000    kernel    PMRD: tellChangeDown::userActivityAtSleep 2
default    13:53:02.341804+0000    hidd    system sleep - device turned off
default    13:53:02.340975+0000    nfcd    00007f9a 9ef025e0 -[_NFHardwareManager powerObserverSystemWillSleep:]:4721
default    13:53:02.341661+0000    coreaudiod    <private> received power notification kIOMessageSystemWillSleep
default    13:53:02.340871+0000    securityd    system will sleep
default    13:53:02.342602+0000    CommCenter    [power]: system will sleep
default    13:53:02.342106+0000    hidd    system will go to sleep
default    13:53:02.341183+0000    securityd    0x7ffee19d59d0 will sleep
default    13:53:02.344408+0000    rapportd    CLink: State changed: FullWake -> DarkWake, 0x1 < DarkWake >
default    13:53:02.346837+0000    CalNCService    System will sleep: kIOMessageSystemWillSleep
default    13:53:02.342482+0000    powerd    Process (null).0 Released Idle Sleep Preventer "IODisplayWrangler" age: id:0 [System: DeclUser kDisp]
default    13:53:02.346960+0000    CalNCService    Suspended timer for imminent system sleep
default    13:53:02.342663+0000    powerd    Received kIOMessageSystemWillSleep. UUID: 7641C95E-1391-4B0B-BF93-9E73B9EC619E
default    13:53:02.346473+0000    locationd    {"msg":"received IOKit notification", "sleepNotification":"SystemWillSleep", "keepAliveClientCount":0}
default    13:53:02.348951+0000    seld    00007fb4 61100040 -[_NFRemoteAdminManager powerObserverSystemWillSleep:]:519  System is sleeping
default    13:53:02.343136+0000    corebrightnessd    Will Sleep
default    13:53:02.342896+0000    powerd    sendNoRespNotification: 0x19
default    13:53:02.342339+0000    bluetoothd    kIOMessageSystemWillSleep; going to sleep...
default    13:53:02.343756+0000    identityservicesd    System going to sleep
default    13:53:02.343678+0000    powerd    Process powerd.123 Created InternalPreventSleep "com.apple.powermanagement.darkwakelinger" age:00:00:00  id:55834609889 [System: DeclUser SRPrevSleep kCPU kDisp]
default    13:53:02.353523+0000    VDCAssistant    [guid:0x8020000005ac8514] Post event kSystemSleep
default    13:53:02.354909+0000    locationd    @ClxEvent, ApSleep, 1, delta, 63.9
default    13:53:02.356026+0000    sharingd    Device will sleep
default    13:53:02.356750+0000    sharingd    Stopping for user 501 on sleep
default    13:53:02.360124+0000    VDCAssistant    [guid:0x8020000005ac8514] ClamshellClosed -> Sleep on event kSystemSleep
default    13:53:02.355914+0000    bluetoothd    PMConnectionHandler - Dark Wake IOPMSystemPowerStateCapabilities - Sleep
default    13:53:02.377274+0000    AirPlayUIAgent    BecomingInactive: NSWorkspaceWillSleepNotification
default    13:53:02.381458+0000    AirPlayXPCHelper    <<<< FigRoutingManager_macOS >>>> routingManager_endpointUIAgentEventCallback: CMSession: UIAgent callback received deviceWillSleep
default    13:53:02.378834+0000    Mail    System will sleep
default    13:53:02.390341+0000    kernel    PMRD: setAggressiveness(0) kPMMinutesToSleep = 0
default    13:53:02.390008+0000    hidd    system sleep - device turned off
default    13:53:02.390826+0000    kernel    PMRD: idle sleep timer disabled
default    13:53:02.404807+0000    webinspectord    Client Connection will sleep: <_RWIRelayClientXPCConnection: 0x7fd8aed08b90>
default    13:53:02.409840+0000    loginwindow    SleepWakeCallback_block_invoke | enter. messageType=0xe0000280, gPerformSleepWakeActions=1, userSwitchedOut=0, screenIsLocked=0
default    13:53:02.410092+0000    kernel    PMRD: tellChangeDown::userActivityAtSleep 2
default    13:53:02.409879+0000    loginwindow    SleepWakeCallback_block_invoke | kIOMessageSystemWillSleep, lockScreen if not already
default    13:53:02.409909+0000    loginwindow    SleepWakeCallback_block_invoke |      Ignore system sleep, we trigger on display sleep only
default    13:53:02.410029+0000    loginwindow    SleepWakeCallback_block_invoke | exiting
default    13:53:02.416493+0000    loginwindow    LWDisplayWillSleepCallback | enter. isMainThread:0, gPerformSleepWakeActions = 1
default    13:53:02.575089+0000    kernel    PMRD: setAggressiveness(0) kPMMinutesToSleep = 30
default    13:53:02.575565+0000    kernel    PMRD: idle sleep timer enabled
default    13:53:02.575566+0000    kernel    PMRD: user inactive 0 min, time to idle sleep 30 min
default    13:53:03.527503+0000    kernel    [IGFB][INFO   ] lastSleep=0, firstNonSleep=0, firstWake=0
default    13:53:03.527504+0000    kernel    [IGFB][INFO   ] Saving info before sleep from FB-0
default    13:53:03.527551+0000    kernel    [IGFB][INFO   ] [Transition_sleep] Attempting sleep
default    13:53:03.529381+0000    loginwindow    -[LWShieldWindowController raiseShieldWindowWithFade:] |      calling CGSSessionIDSetSleepWindowID with just shieldWindowID: 908
default    13:53:03.558670+0000    loginwindow    -[LWDefaultScreenLockUI preLoad] |      calling CGSSessionIDSetSleepWindowID with shieldID: 908 and authWindowID: 909
default    13:53:03.674911+0000    loginwindow    LWDisplayWillSleepCallback | exit
default    13:53:03.912405+0000    kernel    [IGFB][INFO   ] [Transition_sleep] FB0 power state transition complete. Returning at 5683842269
default    13:53:03.921561+0000    kernel    PMRD: System sleep prevented by kPMCPUAssertion
default    13:53:17.346190+0000    powerd    Process powerd.123 TimedOut InternalPreventSleep "com.apple.powermanagement.darkwakelinger" age:00:00:15  id:55834609889 [System: DeclUser SRPrevSleep kCPU kDisp]
default    13:53:17.346827+0000    kernel    PMRD: sleep reason Clamshell Sleep
default    13:53:17.346843+0000    kernel    PMRD: === START (ON_STATE->SLEEP_STATE, 0x40c2) type 1, gen 14, msg 5, dcp 9:9:0
default    13:53:17.346848+0000    kernel    PMRD: askChangeDown ON_STATE->SLEEP_STATE
default    13:53:17.347810+0000    kernel    PMRD: tellChangeDown ON_STATE->SLEEP_STATE
default    13:53:17.348031+0000    kernel    PMRD: tellChangeDown::userActivityAtSleep 2
default    13:53:17.351497+0000    powerd    chooseStandbyDelay(): lowBattery = false, battery powered = true, capacity=80, lowBatteryThreshold=50; chosen delay=86400
default    13:53:17.351677+0000    powerd    Eligible for Standby: 1
default    13:53:17.351644+0000    kernel    PMRD: sleep factors 0x220010 , StandbyNoDelay, AutoPowerOffDisabled, LocalUserActivity
default    13:53:17.351656+0000    kernel    PMRD: sleep params v2, type 5, flags 0x0, wake 0x187d90f, timer 0, poweroff 0
default    13:53:17.351732+0000    powerd    standbyDelay:86400 eligibleForStandby:1 elapsedTime:0 gDelta2Standby:86400
default    13:53:17.351758+0000    powerd    Phase: preStandbyPhase. Ahead of inactivity window. PreStandbyDuration: 0 delta2Standby: 31902
default    13:53:17.351775+0000    powerd    Phase: preStandbyPhase. Updating delta2Standby to 31902
default    13:53:17.351871+0000    powerd    Entering Sleep state due to 'Clamshell Sleep'
default    13:53:17.352490+0000    corespeechd    powerNotificationEventHandler IOPMIsASleep
default    13:53:17.352427+0000    apsd    <private>: prepareForSleep
default    13:53:17.352823+0000    PowerChime    PowerChime: 7481.813589: GOING TO SLEEP: kStateDarkWake -> kStateAsleep
default    13:53:17.352891+0000    rapportd    CLink: State changed: DarkWake -> Sleep, 0x20 < Sleep >
default    13:53:17.352941+0000    PowerChime    PowerChime: 7481.813707: Calling goingToSleepBlock
default    13:53:17.352238+0000    powerd    connectionFireNotification: 0x0
default    13:53:17.354032+0000    dasd    Entering sleep
default    13:53:17.352528+0000    bluetoothd    PMConnectionHandler - IOPMSystemPowerStateCapabilities - Sleep
default    13:53:17.353298+0000    apsd    <private>: prepareForSleep
default    13:53:17.353759+0000    mDNSResponder    Sleeping (old state 0) at 0
default    13:53:17.353351+0000    apsd    <private>: prepareForSleep
default    13:53:17.353440+0000    apsd    <private>: prepareForSleep
default    13:53:17.353516+0000    apsd    <private>: prepareForSleep
default    13:53:17.353589+0000    bluetoothd    Network off sleep date is not setup yet. Wake date cannot be calculated without baseline.
default    13:53:17.353785+0000    rapportd    CLink: Sleep async ack
default    13:53:17.355154+0000    bluetoothd    -[CBXPCManager systemWillSleep] - Is Sleeping
default    13:53:17.355743+0000    bluetoothd    -[CBPowerManager updatePowerState:isSystemSleeping:] - New State:4
default    13:53:17.360116+0000    apsd    <private>: prepareForSleep for 0
default    13:53:17.360264+0000    apsd    <private>: prepareForSleep for 0
default    13:53:17.360292+0000    apsd    <private>: prepareForSleep
default    13:53:17.360320+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:17.361150+0000    bluetoothd    Stopping Scan For Sleep
default    13:53:17.402658+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:17.402693+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:17.402719+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:17.402750+0000    apsd    <private>: prepareForSleep
default    13:53:17.402816+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:17.402966+0000    apsd    <private>: prepareForSleep for <private>
default    13:53:22.392121+0000    powerd    No need to wake to check remaining battery capacity because we'll already be in standby by then (battery check in 108000.000000 s, but standby is in 31902 s)
default    13:53:22.395283+0000    kernel    PMRD: tellChangeDown ON_STATE->SLEEP_STATE
default    13:53:22.395862+0000    kernel    PMRD: sysPowerDownHandler message kIOMessageSystemWillSleep
default    13:53:22.400158+0000    kernel    PMRD: evaluateSystemSleepPolicyEarly
default    13:53:22.400175+0000    kernel    PMRD: sleep factors 0x320800 , RTCAlaramScheduled, NetworkKeepAliveActive, AutoPowerOffDisabled, LocalUserActivity
default    13:53:22.400186+0000    kernel    PMRD: sleep params v2, type 7, flags 0x0, wake 0x187d90f, timer 0, poweroff 0
default    13:53:22.414908+0000    kernel    PMRD: clamshell closed 1, disabled 1, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:22.414911+0000    kernel    PMRD: clamshell closed 1, disabled 1, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:22.415066+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=1, shouldSleepWhenClosed=0
default    13:53:22.415263+0000    sharingd    Clamshell change detected (clamshell closed: YES, clamshell sleep on close: NO)
default    13:53:22.783456+0000    kernel    **** [IOBluetoothHostControllerTransport][powerStateWillChangeTo] -- SleepType is kIOPMSleepTypeNormalSleep -- this = 0x3e00 ****
default    13:53:22.783471+0000    kernel    **** [IOBluetoothHostControllerTransport][powerStateWillChangeToWL] -- SleepType is kIOPMSleepTypeNormalSleep -- this = 0x3e00 ****
default    13:53:22.812999+0000    kernel    AppleCredentialManager: powerStateWillChangeToGated: SYSTEM WILL SLEEP.
default    13:53:24.992186+0000    kernel    PMRD: sleep params v2, type 7, flags 0x0, wake 0x187d90f, timer 31902, poweroff 0
default    13:53:31.698899+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=0, shouldSleepWhenClosed=0
default    13:53:31.700790+0000    sharingd    Clamshell change detected (clamshell closed: NO, clamshell sleep on close: NO)
default    13:53:31.708110+0000    powerd    No need to refresh inactivity prediction: phase=0, start=594341100.000000, now=594309211.708094
default    13:53:31.711205+0000    powerd    sendNoRespNotification: 0x801f
default    13:53:31.715449+0000    rapportd    CLink: State changed: Sleep -> FullWake, 0x10 < UserWake >
default    13:53:31.716197+0000    PowerChime    PowerChime: 7496.176885: EARLY WAKE: kStateAsleep -> kStateEarlyWake
default    13:53:31.715034+0000    bluetoothd    PMConnectionHandler - Full Wake IOPMSystemPowerStateCapabilities - Sleep
default    13:53:31.728343+0000    loginwindow    RegisterSleepWakeCallback_block_invoke | IOPMScheduleUserActiveChangedNotification received:1
default    13:53:31.736496+0000    powerd    Updating wake start timestamp to 5704007308147
default    13:53:31.738583+0000    VDCAssistant    [guid:0x8020000005ac8514] No State Change for event 9 Current state Sleep
default    13:53:31.740818+0000    powerd    Cancelling dark wake update capabilities timer
default    13:53:31.742815+0000    powerd    vm.darkwake_mode: 0 -> 0
default    13:53:24.992188+0000    kernel    IOCPUSleepKernel
default    13:53:31.728523+0000    kernel    AGC:: :::::::> PEG start powerup - post sleep [34m 44.559s downtime]
default    13:53:31.728533+0000    kernel    [IGFB][ERROR  ] setAttributeForConnection called when FB0 is in a sleep state - attribute: 'psr?'
default    13:53:31.731913+0000    kernel    SmartBattery: handleSystemSleepWake(0) = 0
default    13:53:31.739701+0000    kernel    AppleKeyStore: sleeping waiting for endpoint to wake up again.
default    13:53:31.739952+0000    kernel    007584.455575 wlan0.A[1758] processPowerStatsChangesInSleep@33459:WOW (0x6) power report: MpcDuration 7772ms PmDuration 6325ms SleepDuration 15543ms DutyCycle 9.3% RoamScanDuration 0ms ConnectTime 0ms AvailableRoamTime -1ms
default    13:53:31.760998+0000    kernel    007584.476624 wlan0.A[1764] configureEnterpriseAssociatedSleepExit@1206:WNM is Not Supported
default    13:53:31.775582+0000    locationd    {"msg":"received IOKit notification", "sleepNotification":"SystemWillPowerOn", "keepAliveClientCount":0}
default    13:53:31.777667+0000    kernel    PMRD: setAggressiveness(0) kPMMinutesToSleep = 0
default    13:53:31.778285+0000    kernel    PMRD: idle sleep timer disabled
default    13:53:31.785131+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:31.785273+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:31.800730+0000    locationd    @ClxEvent, ApSleep, 0, delta, 29.4
default    13:53:31.872337+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:31.872535+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:31.885021+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:31.885132+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:31.930291+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:31.940819+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:31.942998+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:31.943145+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:32.277617+0000    kernel    [IGFB][ERROR  ] setAttribute called when FB0 is in a sleep state - attribute: 'pwrs'
default    13:53:32.277630+0000    kernel    [IGFB][INFO   ] FB0 power state transition Sleep to Wake
default    13:53:32.277631+0000    kernel    [IGFB][INFO   ] lastSleep=0, firstNonSleep=1, firstWake=1
default    13:53:32.404514+0000    kernel    [IGPU] A message did not receive a response when firmware went to sleep!
default    13:53:32.404519+0000    kernel    [IGPU] A message did not receive a response when firmware went to sleep!
default    13:53:32.428523+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=0, shouldSleepWhenClosed=0
default    13:53:32.466399+0000    loginwindow    SleepWakeCallback_block_invoke | enter. messageType=0xe0000320, gPerformSleepWakeActions=1, userSwitchedOut=0, screenIsLocked=1
default    13:53:32.466489+0000    loginwindow    SleepWakeCallback_block_invoke | kIOMessageSystemWillPowerOn, isMainThread:0
default    13:53:32.467384+0000    loginwindow    SleepWakeCallback_block_invoke | exiting
default    13:53:32.505285+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:32.505413+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:32.539774+0000    contextstored    Idle Sleep Preventers Count: 1
default    13:53:32.539884+0000    contextstored    Idle Sleep Preventers: <private>
default    13:53:32.605168+0000    kernel    [IGFB][INFO   ] [Transition_wake] FB0 Lighting up display in resume from sleep
default    13:53:32.888539+0000    powerd    Updating wake end timestamp to 5706312085453
default    13:53:32.888958+0000    powerd    Wake from Normal Sleep [CDNVA] : due to EC.LidOpen/Lid Open
default    13:53:32.889122+0000    powerd    <private>
default    13:53:32.889441+0000    powerd    sendNoRespNotification: 0x1f
default    13:53:32.889621+0000    kernel    PMRD: tellChangeUp SLEEP_STATE->ON_STATE
default    13:53:32.889753+0000    bluetoothd    PMConnectionHandler - Full Wake IOPMSystemPowerStateCapabilities - Sleep
default    13:53:32.914689+0000    loginwindow    SleepWakeCallback_block_invoke | enter. messageType=0xe0000300, gPerformSleepWakeActions=1, userSwitchedOut=0, screenIsLocked=1
default    13:53:32.914720+0000    loginwindow    SleepWakeCallback_block_invoke | exiting
default    13:53:32.916305+0000    locationd    {"msg":"received IOKit notification", "sleepNotification":"SystemHasPoweredOn", "keepAliveClientCount":0}
default    13:53:32.915241+0000    VDCAssistant    [guid:0x8020000005ac8514] Sleep -> ClamshellClosed on event kSystemWake
default    13:53:32.915517+0000    kernel    PMRD: PowerChangeDone: SLEEP_STATE->ON_STATE
default    13:53:35.064379+0000    loginwindow    -[LWShieldWindowController lowerShieldWindow] |      calling CGSSessionIDSetSleepWindowID with shieldID and authWindowID set to kCGNullWindowID
default    13:53:48.932279+0000    kernel    PMRD: clamshell closed 0, disabled 1, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:48.932282+0000    kernel    PMRD: clamshell closed 0, disabled 1, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:48.932476+0000    kernel    PMRD: clamshell closed 0, disabled 0, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:48.932524+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=0, shouldSleepWhenClosed=0
default    13:53:48.932737+0000    sharingd    Clamshell change detected (clamshell closed: NO, clamshell sleep on close: YES)
default    13:53:48.932478+0000    kernel    PMRD: clamshell closed 0, disabled 0, desktopMode 0, ac 0 sleepDisabled 0
default    13:53:48.932631+0000    loginwindow    clamshellStateChanged | Clamshell state changed: closed=0, shouldSleepWhenClosed=2
default    13:53:51.496531+0000    kernel    PMRD: setAggressiveness(0) kPMMinutesToSleep = 30
default    13:53:51.498625+0000    kernel    PMRD: idle sleep timer enabled
default    13:55:49.066303+0000    powerd    Process backupd.57259 ClientDied PreventUserIdleSystemSleep "Time Machine backup" age:00:09:20  id:4295002192 [System: DeclUser kDisp]

Pmset logs also look ok…

Logging IORegisterForSystemPower sleep/wake messages
pmset is in logging mode now. Hit ctrl-c to exit.
2019-11-01 14:08:34 +0000 IOPSNotificationCreateRunLoopSource
Now drawing from 'Battery Power'
-InternalBattery-0 (id=8061027)    74%; discharging; (no estimate) present: true

2019-11-01 14:08:37 +0000 IORegisterForSystemPower: ...Sleeping...
2019-11-01 14:09:01 +0000 com.apple.system.powersources

2019-11-01 14:09:02 +0000 IORegisterForSystemPower: ...HasPoweredOn...
  Wake Reason = EC.LidOpen
  wakeType = Lid Open

Best Answer

I am in the same situation with my MBP 13 battery drain while sleeping. I am not a super expert but I think the cause of this drain in Catalina is the BT beacon feature. Have you tried to disable find my Mac. Looking at logs it seems Macs now try to send data over the network even when sleeping.