20-07-12 update:
经过上周几天的观察和这个周末两天休眠的情况,发现一晚上休眠耗电基本2%左右,但是连续休眠两天发现跑了50%电量,今天下午来通过 pmset -g log | grep Wake 查看日志,发现一些情况:

2020-07-10 17:15:08 +0800 Wake Requests           [*process=powerd request=AdaptiveWake deltaSecs=50391 wakeAt=2020-07-11 07:14:59] [process=powerd request=UserWake deltaSecs=150292 wakeAt=2020-07-12 11:00:00 info="com.apple.alarm.user-visible-com.apple.remindd.time-alarm,315"] 
...
2020-07-12 11:00:02 +0800 Assertions              PID 127(powerd) Created UserIsActive "com.apple.powermanagement.wakeschedule" 00:00:00  id:0x0x900008234 [System: DeclUser IntPrevDisp kDisp]
...

发现一些和 reminder 和 schedule 有关的唤醒日志。执行 pmset -g sched 的确有很多 remainder 的计划任务:

marconie@marco-mbp ~ % pmset -g sched
Scheduled power events:
 [0]  wake at 07/13/20 08:01:56 by 'com.apple.alarm.user-visible-Weekly Usage Report'
 [1]  wake at 07/17/20 20:00:00 by 'com.apple.alarm.user-visible-com.apple.remindd.time-alarm' User visible: true
 [2]  wake at 07/19/20 21:00:00 by 'com.apple.alarm.user-visible-com.apple.remindd.time-alarm' User visible: true
 [3]  wake at 07/19/20 21:00:00 by 'com.apple.alarm.user-visible-com.apple.remindd.time-alarm' User visible: true

这些可能跟我在 remainder 设定的一些事项有关吧,经过查询,网上人也发现这个问题:eminders app waking mac from sleep,貌似目前没有好的解决方法。

最近升级了我的 macbook pro 2015 的 ssd,买了一块第三方的 nvme 512G 硬盘。更换很顺利,使用 time machine 还原系统后就跟什么都没发生一样。

但是随着这几天的使用,发现待机耗电巨大,一晚上合盖耗电 20% 左右。查看 activity monitor 也没发现什么耗电量大的后台服务。发现可能是合盖后依然没有进入休眠,一直有什么东西在运转有关。回想我在安装好新硬盘进入系统后,修改了些什么设置,好像就是打开了 find my mac,可能就是休眠后一直存在网络活动有关吧。

macOS 上可以在设置里对接上电源和使用电池的情况下系统休眠进行单独设置。但是里面的设置项比较少,在使用电池的界面上已经把 休眠后进行网络活动的选项关掉了。

想要进行更加详细的设置可以使用命令 pmset 处理。pmset 是 macOS 上的电源管理工具,它可以查看,修改系统休眠及唤醒的相关设置。

pmset

pmset 命令必须在 root 权限下执行。

电源管理参数设置

sudo pmset [−a | −b | −c | −u] [setting value] [...]

pmset 可以对不同电源状态下进行独立设置。

  • -a(all, default) 代表对所有供电情况下统一设置,也是默认的选项
  • -b(battery) 电池供电情况下的设置参数
  • -c(charger) 修改连接上外接电源情况下的设置参数
  • -u(UPS) 连接上 ups 情况下的设置参数

例如,在电池供电情况下,无操作5分钟后屏幕休眠:

sudo pmset -b displaysleep 5

常用的参数有:

  • displaysleep – display sleep timer in minutes, 0 to disable display sleep
  • disksleep – disk spin-down timer in minutes, 0 to disable disk sleep
  • sleep – system sleep timer in minutes, 0 to disable sleep
  • hibernatemode - change hibernation mode, 0 for RAM powered while sleeping; 1 for RAM contents written to disk and system totally unpowered; 3 for RAM both powered and written to disk; 5 is the same as mode 1, but for use with secure virtual memory; 7 is the same as mode 3, but for use with secure virtual memory; 25 for hibernation in Mac OS X 10.7, with RAM contents written to disk and system totally unpowered
  • autorestart - automatic restart after loss of power, 1 to enable or 0 to disable
  • tcpkeepalive - keep network process when sleep, 1 to enable or 0 to disable

计划任务的设置

sudo pmset [repeat, schedule] [sleep, wake, poweron, shutdown, wakeorpoweron] [<MTWRFSU> <date/time>]

pmset 可以设置计划任务,来根据日期来将设备休眠或唤醒。

例如,每天晚上 23:59 自动关机,每天早上 7:00 自动唤醒或开机:

sudo pmset repeat shutdown MTWRFSU 23:59:00 wakeorpoweron MTWRFSU 7:00:00
  • type; one of sleep, wake, poweron, shutdown or wakeorpoweron
  • date and time (schedule only); in the format "MM/dd/yy HH:mm:ss"; must be in 24-hour format, must be in quotes
  • time (repeat only); in the format HH:mm:ss; must be in 24 format, but does not have to be in quotes
  • weekdays; a subset of MTWRFSU such as M or MTWRF are valid, as are strings weekdays, weekends, and everyday
  • owner; a string describing the person or program who is scheduling the power event (optional)

查看电源信息

sudo pmset −g [option]

当我们想要知道当前系统进行了那些设置,我们可以使用 -g 参数来查看。

查看当前状况下的电源参数设置:

sudo pmset -g

查看所有电源情况下的参数设置:

sudo pmset -g custom

查看计划任务的设置:

sudo pmset -g sched

查看历史日志:

sudo pmset -g log

日志的查看一般可以配合 grep 来过滤有用的信息,例如想要查看那些进程唤醒了设备可以使用:

sudo pmset -g log | grep Wake

修复电源问题

首先查看我的电池供电情况下的参数设置:

sudo pmset -g custom

在 Battery Power 列表里可以找到 tcpkeepalive 当前的设置为 1。

根据我的情况,我修改了电池供电情况下的 tcpkeepalive 为 0,问题就解决了:

sudo pmset -b tcpkeepalive 0

执行命令后,会提示关闭这个参数会导致 find my mac 等功能失效。

man pmset

PMSET(1)                  BSD General Commands Manual                 PMSET(1)

NAME
     pmset -- manipulate power management settings

SYNOPSIS
     pmset [-a | -b | -c | -u] [setting value] [...]
     pmset -u [haltlevel percent] [haltafter minutes] [haltremain minutes]
     pmset -g [option]
     pmset schedule [cancel | cancelall] type date+time [owner]
     pmset repeat cancel
     pmset repeat type weekdays time
     pmset relative [wake | poweron] seconds
     pmset [touch | sleepnow | displaysleepnow | boot]

DESCRIPTION
     pmset manages power management settings such as idle sleep timing, wake
     on administrative access, automatic restart on power loss, etc.

     Note that processes may dynamically override these power management set-
     tings by using I/O Kit power assertions.  Whenever processes override any
     system power settings, pmset will list those processes and their power
     assertions in -g and -g assertions. See caffeinate(8).

SETTING
     pmset can modify the values of any of the power management settings
     defined below. You may specify one or more setting & value pairs on the
     command-line invocation of pmset.  The -a, -b, -c, -u flags determine
     whether the settings apply to battery ( -b ), charger (wall power) ( -c
     ), UPS ( -u ) or all ( -a ).

     Use a minutes argument of 0 to set the idle time to never for sleep
     disksleep and displaysleep

     pmset must be run as root in order to modify any settings.

SETTINGS
     displaysleep - display sleep timer; replaces 'dim' argument in 10.4
     (value in minutes, or 0 to disable)
     disksleep - disk spindown timer; replaces 'spindown' argument in 10.4
     (value in minutes, or 0 to disable)
     sleep - system sleep timer (value in minutes, or 0 to disable)
     womp - wake on ethernet magic packet (value = 0/1). Same as "Wake for
     network access" in the Energy Saver preferences.
     ring - wake on modem ring (value = 0/1)
     powernap - enable/disable Power Nap on supported machines (value = 0/1)
     proximitywake - On supported systems, this option controls system wake
     from sleep based on proximity of devices using same iCloud id. (value =
     0/1)
     autorestart - automatic restart on power loss (value = 0/1)
     lidwake - wake the machine when the laptop lid (or clamshell) is opened
     (value = 0/1)
     acwake - wake the machine when power source (AC/battery) is changed
     (value = 0/1)
     lessbright - slightly turn down display brightness when switching to this
     power source (value = 0/1)
     halfdim - display sleep will use an intermediate half-brightness state
     between full brightness and fully off  (value = 0/1)
     sms - use Sudden Motion Sensor to park disk heads on sudden changes in G
     force (value = 0/1)
     hibernatemode - change hibernation mode. Please use caution. (value =
     integer)
     hibernatefile - change hibernation image file location. Image may only be
     located on the root volume. Please use caution. (value = path)
     ttyskeepawake - prevent idle system sleep when any tty (e.g. remote login
     session) is 'active'. A tty is 'inactive' only when its idle time exceeds
     the system sleep timer. (value = 0/1)
     networkoversleep - this setting affects how OS X networking presents
     shared network services during system sleep. This setting is not used by
     all platforms; changing its value is unsupported.
     destroyfvkeyonstandby - Destroy File Vault Key when going to standby
     mode. By default File vault keys are retained even when system goes to
     standby. If the keys are destroyed, user will be prompted to enter the
     password while coming out of standby mode.(value: 1 - Destroy, 0 -
     Retain)

GETTING
     -g (with no argument) will display the settings currently in use.
     -g live displays the settings currently in use.
     -g custom displays custom settings for all power sources.
     -g cap displays which power management features the machine supports.
     -g sched displays scheduled startup/wake and shutdown/sleep events.
     -g ups displays UPS emergency thresholds.
     -g ps / batt displays status of batteries and UPSs.
     -g pslog displays an ongoing log of power source (battery and UPS) state.
     -g rawlog displays an ongoing log of battery state as read directly from
     battery.
     -g therm shows thermal conditions that affect CPU speed. Not available on
     all platforms.
     -g thermlog shows a log of thermal notifications that affect CPU speed.
     Not available on all platforms.
     -g assertions displays a summary of power assertions. Assertions may pre-
     vent system sleep or display sleep. Available 10.6 and later.
     -g assertionslog shows a log of assertion creations and releases. Avail-
     able 10.6 and later.
     -g sysload displays the "system load advisory" - a summary of system
     activity available from the IOGetSystemLoadAdvisory API. Available 10.6
     and later.
     -g sysloadlog displays an ongoing log of lives changes to the system load
     advisory. Available 10.6 and later.
     -g ac / adapter will display details about an attached AC power adapter.
     Only supported for MacBook and MacBook Pro.
     -g log displays a history of sleeps, wakes, and other power management
     events. This log is for admin & debugging purposes.
     -g uuid displays the currently active sleep/wake UUID; used within OS X
     to correlate sleep/wake activity within one sleep cycle.  history
     -g uuidlog displays the currently active sleep/wake UUID, and prints a
     new UUID as they're set by the system.
     -g history is a debugging tool. Prints a timeline of system sleeplwake
     UUIDs, when enabled with boot-arg io=0x3000000.
     -g historydetailed Prints driver-level timings for a sleep/wake. Pass a
     UUID as an argument.
     -g powerstate [class names] Prints the current power states for I/O Kit
     drivers. Caller may provide one or more I/O Kit class names (separated by
     spaces) as an argument. If no classes are provided, it will print all
     drivers' power states.
     -g powerstatelog [-i interval] [class names] Periodically prints the
     power state residency times for some drivers. Caller may provide one or
     more I/O Kit class names (separated by spaces). If no classes are pro-
     vided, it will log the IOPower plane's root registry entry. Caller may
     specify a polling interval, in seconds with -i <polling interval>; other-
     wise it defaults to 5 seconds.
     -g stats Prints the counts for number sleeps and wakes system has gone
     thru since boot.
     -g systemstate Prints the current power state of the system and available
     capabilites.
     -g everything Prints output from every argument under the GETTING header.
     This is useful for quickly collecting all the output that pmset provides.
     Available in 10.8.

SAFE SLEEP ARGUMENTS
     hibernatemode supports values of 0, 3, or 25. Whether or not a hiberna-
     tion image gets written is also dependent on the values of standby and
     autopoweroff

     For example, on desktops that support standby a hibernation image will be
     written after the specified standbydelay time. To disable hibernation
     images completely, ensure hibernatemode standby and autopoweroff are all
     set to 0.

     hibernatemode = 0 by default on desktops. The system will not back memory
     up to persistent storage. The system must wake from the contents of mem-
     ory; the system will lose context on power loss. This is, historically,
     plain old sleep.

     hibernatemode = 3 by default on portables. The system will store a copy
     of memory to persistent storage (the disk), and will power memory during
     sleep. The system will wake from memory, unless a power loss forces it to
     restore from hibernate image.

     hibernatemode = 25 is only settable via pmset. The system will store a
     copy of memory to persistent storage (the disk), and will remove power to
     memory. The system will restore from disk image. If you want "hiberna-
     tion" - slower sleeps, slower wakes, and better battery life, you should
     use this setting.

     Please note that hibernatefile may only point to a file located on the
     root volume.

STANDBY ARGUMENTS
     standby causes kernel power management to automatically hibernate a
     machine after it has slept for a specified time period. This saves power
     while asleep. This setting defaults to ON for supported hardware. The
     setting standby will be visible in pmset -g if the feature is supported
     on this machine.

     standbydelayhigh and standbydelaylow specify the delay, in seconds,
     before writing the hibernation image to disk and powering off memory for
     Standby.  standbydelayhigh is used when the remaining battery capacity is
     above highstandbythreshold , and standbydelaylow is used when the remain-
     ing battery capacity is below highstandbythreshold.

     highstandbythreshold has a default value of 50 percent.

     autopoweroff is enabled by default on supported platforms as an implemen-
     tation of Lot 6 to the European Energy-related Products Directive. After
     sleeping for <autopoweroffdelay> seconds, the system will write a hiber-
     nation image and go into a lower power chipset sleep. Wakeups from this
     state will take longer than wakeups from regular sleep.

     autopoweroffdelay specifies the delay, in seconds, before entering
     autopoweroff mode.

UPS SPECIFIC ARGUMENTS
     UPS-specific arguments are only valid following the -u option. UPS set-
     tings also have an on/off value. Use a -1 argument instead of percent or
     minutes to turn any of these settings off. If multiple halt conditions
     are specified, the system will halt on the first condition that occurs in
     a low power situation.

     haltlevel - when draining UPS battery, battery level at which to trigger
     an emergency shutdown (value in %)
     haltafter - when draining UPS battery, trigger emergency shutdown after
     this long running on UPS power (value in minutes, or 0 to disable)
     haltremain - when draining UPS battery, trigger emergency shutdown when
     this much time remaining on UPS power is estimated (value in minutes, or
     0 to disable)

     Note: None of these settings are observed on a system with support for an
     internal battery, such as a laptop. UPS emergency shutdown settings are
     for desktop and server only.

SCHEDULED EVENT ARGUMENTS
     pmset allows you to schedule system sleep, shutdown, wakeup and/or power
     on. "schedule" is for setting up one-time power events, and "repeat" is
     for setting up daily/weekly power on and power off events. Note that you
     may only have one pair of repeating events scheduled - a "power on" event
     and a "power off" event. For sleep cycling applications, pmset can sched-
     ule a "relative" wakeup or poweron to occur in seconds from the end of
     system sleep/shutdown, but this event cannot be cancelled and is inher-
     ently imprecise.

     type - one of sleep, wake, poweron, shutdown, wakeorpoweron
     date/time - "MM/dd/yy HH:mm:ss" (in 24 hour format; must be in quotes)
     time - HH:mm:ss
     weekdays - a subset of MTWRFSU ("M" and "MTWRF" are valid strings)
     owner - a string describing the person or program who is scheduling this
     one-time power event (optional)

POWER SOURCE ARGUMENTS
     -g with a 'batt' or 'ps' argument will show the state of all attached
     power sources.

     -g with a 'pslog' or 'rawlog' argument is normally used for debugging,
     such as isolating a problem with an aging battery.

OTHER ARGUMENTS
     boot - tell the kernel that system boot is complete (normally LoginWindow
     does this). May be useful to Darwin users.
     touch - PM re-reads existing settings from disk.
     noidle - pmset prevents idle sleep by creating a PM assertion to prevent
     idle sleep(while running; hit ctrl-c to cancel). This argument is depre-
     cated in favor of caffeinate(8). Please use caffeinate(8) instead.
     sleepnow - causes an immediate system sleep.
     restoredefaults - Restores Energy Saver settings to their default values.
     (Like clicking "Restore Defaults" in Energy Saver GUI).
     displaysleepnow - causes display to go to sleep immediately.
     resetdisplayambientparams - resets the ambient light parameters for cer-
     tain Apple displays.
     dim - deprecated in 10.4 in favor of 'displaysleep'. 'dim' will continue
     to work.
     spindown - deprecated in 10.4 in favor of 'disksleep'. 'spindown' will
     continue to work.

EXAMPLES
     This command sets displaysleep to a 5 minute timer on battery power,
     leaving other settings on battery power and other power sources unper-
     turbed.

     pmset -b displaysleep 5

     Sets displaysleep to 10, disksleep to 10, system sleep to 30, and turns
     on WakeOnMagicPacket for ALL power sources (AC, Battery, and UPS) as
     appropriate

     pmset -a displaysleep 10 disksleep 10 sleep 30 womp 1

     Restores the system's energy settings to their default values.

     For a system with an attached and supported UPS, this instructs the sys-
     tem to perform an emergency shutdown when UPS battery drains to below
     40%.

     pmset -u haltlevel 40

     For a system with an attached and supported UPS, this instructs the sys-
     tem to perform an emergency shutdown when UPS battery drains to below
     25%, or when the UPS estimates it has less than 30 minutes remaining run-
     time. The system shuts down as soon as either of these conditions is met.

     pmset -u haltlevel 25 haltremain 30

     For a system with an attached and supported UPS, this instructs the sys-
     tem to perform an emergency shutdown after 2 minutes of running on UPS
     battery power.

     pmset -u haltafter 2

     Schedules the system to automatically wake from sleep on July 4, 2016, at
     8PM.

     pmset schedule wake "07/04/16 20:00:00"

     Schedules a repeating shutdown to occur each day, Tuesday through Satur-
     day, at 11AM.

     pmset repeat shutdown TWRFS 11:00:00

     Schedules a repeating wake or power on event every tuesday at 12:00 noon,
     and a repeating sleep event every night at 8:00 PM.

     pmset repeat wakeorpoweron T 12:00:00 sleep MTWRFSU 20:00:00

     Prints the power management settings in use by the system.

     pmset -g

     Prints a snapshot of battery/power source state at the moment.

     pmset -g batt

     If your system suddenly sleeps on battery power with 20-50% of capacity
     remaining, leave this command running in a Terminal window. When you see
     the problem and later power and wake the computer, you'll be able to
     detect sudden discontinuities (like a jump from 30% to 0%) indicative of
     an aging battery.

     pmset -g pslog

SEE ALSO
     caffeinate(8)

FILES
     All changes made through pmset are saved in a persistent preferences file
     (per-system, not per-user) at
     /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist

     Scheduled power on/off events are stored separately in
     /Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist

     pmset modifies the same file that System Preferences Energy Saver modi-
     fies.

Darwin                         November 9, 2012                         Darwin

参考链接

https://en.wikipedia.org/wiki/Pmset
https://www.dssw.co.uk/reference/pmset.html

标签:无

你的评论