MacBook Pro Insomnia
(manuel.bernhardt.io)- MacBook Pro Silicon M1 Max 모델에서 밤새 배터리 소모 현상 경험
- 직접 전원 관리 로그를 분석하려고 시도했으나 문제 원인 파악에는 한계가 있었음
- Sleep Aid라는 전용 앱을 이용해 웨이크 이벤트를 시각적으로 확인 가능함
- Sleep Aid 설정에서 "유지 관리 목적으로 깨우기(Wake for maintenance) " 비활성화가 원인임을 발견함
- 해당 옵션을 다시 활성화한 이후, 밤새 배터리 소모 현상 해결
MacBook Pro에서의 밤새 배터리 소모 이슈 경험
- 수년간 MacBook Pro Silicon M1 Max를 사용해온 경험이 있음
- 최근 예기치 않게 노트북을 전원에 연결하지 않고 두면 밤새 배터리 소모가 심해지는 증상이 나타남
- 증상이 점점 심해져 직접 원인 분석을 시작하게 됨
전원 관리 로그 분석 시도
- MacOS의 터미널 명령어
pmset -g log
를 통해 전원 관리 관련 로그 확인 가능함 - 해당 로그의 출력이 방대하고 해석이 어려워, 로그 분석을 위해 pmset-analyzer라는 직접 개발한 간단한 도구를 사용함
- 그러나 이 도구만으로 실질적인 해결에는 큰 도움이 되지 않았음
세부 설정 조정 및 추가 조사
- 공식 문서와 커뮤니티에서 안내하는
tcpkeepalive
등 전원 관리 세팅을 하나씩 조정해봄 - 설정 변경만으로는 문제 해결에 큰 효과를 보지 못함
Sleep Aid 앱을 통한 문제 해결
- 추가 조사 과정에서 Sleep Aid라는 앱을 알게 됨
- 이 앱은 웨이크 이벤트(wake event) 를 시각적으로 보여주고, 각종 전원 관리 설정을 직관적으로 변경할 수 있는 인터페이스를 제공함
- Sleep Aid에서 확인 결과, "유지 관리 목적으로 깨우기(Wake for maintenance) " 옵션이 비활성화된 상태였음
- 앱의 설명대로 이 설정이 꺼져 있으면 잦은 웨이크 이벤트가 발생할 수 있음
- 해당 옵션을 다시 활성화하였고, 이 후로는 밤새 배터리 소모 현상이 발생하지 않음
맥북 잠자기 모드로 해놓고 자는데 갑자기 새벽에 화면 켜지더니 온방이 훤해요. 자다가 깨서 그냥 완전 종료시킨적 많음. 이게 언제 부터 논란거리였는데 아직도...
Hacker News 의견
- 또 하나의 유용한 팁 공유임. Activity Monitor에서 Energy 탭을 열고 "Preventing sleep" 열로 정렬하면 어떤 앱이 macOS의 수면을 막는지 확인할 수 있음. 내 경우 Devonthink 앱이 원인이라고 확인함. 아직 버그 리포트는 못 올렸음. Apple의 전원 관리 기능이 이런 문제를 사용자에게 알리지 않는 게 의아함. 맥이 가방 안에서 뜨겁게 달아오르고 배터리가 소진되는 상황이 중요한 문제 아닌지 의문임. 그 와중에 Chrome이 네트워크 장치 검색 허용할지 계속 물어보는 건 훨씬 덜 중요한 것 같음
- Apple의 전원 관리가 이에 대한 경고를 안 한다는 것도 놀랍지만, 덮개를 닫아도 어떤 앱이 시스템의 수면을 막을 수 있다는 점이 더 놀라움. 동영상 플레이어처럼 때때로 타임아웃 기반의 수면 방지가 필요한 건 이해함. 하지만 덮개를 닫거나 수면 버튼을 눌렀을 때 시스템이 잠자지 않도록 앱이 결정하는 건 정말 쓸모 있는 예시가 거의 없음. 대부분 이런 상황은 결과적으로 백팩 안에서 과열된 노트북을 가져올 확률만 높임. 더욱이, 웹 페이지 하나만으로도 시스템이 수면으로 들어가지 못하게 할 수 있다니, 70개 탭 중 어떤 게 문제인지 찾기 어려움. 타임아웃 기반의 수면 방지 권한과 "뚜껑을 닫으면 무조건 잠자기" 같은 코어 동작 변경 권한을 분리하면 좋을 것 같음. 타임아웃 사용은 허용해도 덮개 닫힘 같은 것은 반드시 사용자에게 알리고 허가받아야 함
- 아무 앱이나 시스템 전체의 수면을 막을 수 있다는 걸 몰랐음. 이런 권한은 사용자 통제 아래 있어야 마땅함. 개발자가 이러한 API를 호출하려면 최소한 entitlement가 필요한 것 아닌지 궁금함
- shell에서
pmset -g assertions
명령어를 쓰면 어떤 프로세스가 시스템 수면을 막고 있는지 알 수 있고, 보류 중인 파워 assertion들의 상세 정보를 볼 수 있음.pmset
에는 공식 문서에 없는 명령어도 있는데, Apple이 소스코드에 공개한 걸 보면 알 수 있음. 특정 assertion을 무시하도록 만드는 명령도 있음. 단 "UserIsActive" assertion을 끄면 시스템을 깨우는 데 애를 먹을 수 있음 - 이런 기능이 있는 줄 몰랐음, 고마움. 최근에 사용하지 않던 MacBook의 배터리가 자꾸 줄어드는 이유가 궁금했었는데, 알고 보니 Firefox가 수면을 막고 있었음. 자동재생 비디오 때문인 듯함. 완벽하진 않지만 고칠 수 있는 문제임
- Safari는 한편으로는 Netflix를 시청 중일 때 전력 소모가 많으니 닫으라고 알림을 띄움
- 내 MacBook Pro에서도 비슷한 현상이 있었음. Apple Silicon 모델이 아니라 이전 모델임. 그 당시 공유기에서 DHCP 임대 시간을 기본값보다 훨씬 낮게 15분으로 바꿨었음. 내 생각에는 MacBook이 15분마다 IP 갱신을 위해 깨어나서, 잠깐 자다가 또 깨어나는 현상이 반복된 것으로 보임. 공유기 임대 시간을 이전의 기본값으로 되돌리니 배터리 소모 문제가 완전히 해결됐음. 그 원인을 예측하긴 힘들었는데, 마침 새 MacBook Pro를 산 직후라 이런저런 문제에 더 신경을 썼던 덕에 빨리 찾게 됨
- 제대로 동작하는 DHCP 클라이언트는 임대 시간의 50%가 지나면 갱신 요청을 하게 됨. 즉 생각보다 더 자주 깨어났을 가능성이 높음
- DHCP 임대 시간을 15분으로 바꾼 이유가 궁금함. 어떤 목적이 있었는지 물어봄
- 나도 방금 알게 됐는데, 사용 중인 mikrotik 공유기는 기본적으로 10분짜리 임대 기간을 사용함
- 이런 현상 너무 신기함. 한 번 IP 갱신을 위해 깨어날 때 어느 정도 mAh를 소모하는지 궁금함. 수 밀리암페어-밀리초 수준일 것 같은데, 결국 노트북이 WiFi만 잠깐 켜고 패킷 몇 개 주고받는 정도임. 물론 Apple Silicon 이전 모델이라서 실제로는 얘가 깨어있는 동안 다른 짓을 추가로 했을 수도 있음
- 이건 macOS 버그라고 생각함. 수면 중일 때는 굳이 IP가 필요 없으므로 DHCP 임대 갱신을 목적으로 깨어나는 건 비정상임. 소스가 공개되지 않은 OS는 이런 점에서 문제임
- “Wake for maintenance” 옵션이 꺼져 있으면 Sleep Aid에서 설정 창에 이로 인해 자주 깨어날 수 있다고 안내함. 작가가 실수로 “옵션이 꺼져 있었다”라고 적은 것 아닐지 궁금함
- 나도 같은 생각이었음. 이건 추측이지만, 이 설정이 꺼져 있으면 깨어나는 이벤트가 시간별로 묶여서 한 번에 처리되지 않고 밤새 아무 때나 여러 번 발생할 수 있을 것 같음. 바로 이런 현상을 설명하는 것으로 보임
- 헷갈림. 명시적으로 컴퓨터를 깨우는 옵션을 켜면 오히려 깨어나는 횟수가 줄어드는지 궁금함
- 나도 혼란스러움. 작성자의 스크린샷에서는 Enable 상태임. 그게 ‘정상’으로 보이는데, Disabled가 왜 더 많은 Wake를 유발하는지 직관적으로 잘 이해가 안 됨
- 이런 상식에 반하는 설명은 부연 설명이 필요하거나 최소한 그런 예외임을 명확히 밝혀주길 바람. 글 작성 후 수정할 때 이런 문제를 잡기가 어려움
- 내가 그동안 가지고 있던 모든 Mac 랩탑에서 뚜껑을 닫을 때 항상 hibernate로 설정해 문제를 해결했음. 뚜껑을 열어서 다시 사용할 때는 20~30초 정도 복구 시간이 걸리는데, 수면과 배터리 소모에 대해 신경 쓸 일이 상당히 줄어드는 작은 대가라고 생각함. 터미널에서 이 명령어로 쓸 수 있음:
sudo pmset -a hibernatemode 25
. 원래대로 돌리려면sudo pmset -a hibernatemode 3
를 입력하면 됨- hibernate 모드가 FDE(전체 디스크 암호화)와 잘 작동하는지 궁금함. Linux에서는 메모리 내용을 디스크에 쓰는 과정에서 암호화 관련 주의사항이 다양함
- 대부분의 사람들이 기대하는 동작을 가장 간편하게 설정하는 방법이라고 생각함
- Macbook 수면 관련 문제를 정말 오래 파고들었지만, WindowServer가 원인이고 결국 풀 OS 재설치가 필요할 것 같음. 한두 달에 한 번씩 가방에서 뜨겁고 방전된 노트북을 꺼내는 것만큼 속상한 건 "난 그런 적 없는데 뭔가 잘못 사용한 거 아니냐"는 반응임
- MacOS는 10년 전부터 거의 유지보수 모드인 것처럼 느껴짐. ARM/Mac Silicon 이식 작업이 엄청 많았을 거라 생각함. AI 업데이트도 실망스러웠고, 최근에 실질적인 개선은 많지 않았던 느낌임. 예전에 전원 버튼이 백스페이스 옆에 붙은 Intel Macbook Air를 쓴 적 있었는데, 전원 버튼을 한 번만 누르면 바로 꺼지지 않도록 hold해야 하게 만드는 스크립트를 Mac 포럼에서 찾아서 사용했었음. 그런데 그 스크립트에 트로이 목마가 숨겨져 있어서 맥 공장 초기화와 iCloud 전체 삭제가 필요했음. 이 스크립트는 내부 변수로 보이는 GUID도 있었고 어딜지 모르는 곳에서 리소스를 다운로드할 수 있었다고 함. 나는 그냥 내부 변수라고만 생각했었음
-
Apple 공식 지원 문서를 보면 이 기능(전력 옵션)이 기본 제공됨
- macOS 26 DB가 설치된 M4 MacBook Air에는 해당 위치에 power nap이 없음. 대신 "Wake for network access"가 등장했고, 기본값은 "Only on Power Adapter"임
- power nap과 "wake for network access"가 같다고 착각했었음. macOS 26에서는 더 이상 옵션이 없는 듯함. 내 설정은 "Only on Power Adapter"로 되어 있는데, 합리적임. M4 MacBook Air 기준임
- 나도 거의 똑같은 블로그 글을 지난주에 썼었음. 아쉽게도 내 경우에는 그 솔루션이 효과가 없었는데, power nap 이외의 다른 프로세스가 계속 깨움. 관련 글: annoying.technology 포스트
- Activity Monitor의 Energy 탭은 이런 상황에서 유용함. 어떤 앱이 완전히 시스템 sleep을 막는지 알 수 있고, 각 프로세스의 지난 12시간 전력 소모도 볼 수 있음. 밤새 곧바로 원인을 추적할 수 있음
- 나 역시 MacBook Pro(Apple Silicon)에서 비슷한 문제를 겪고 있음. SSD를 연결한 채로 잠자기를 하면 주기적으로 시스템이 깨어나 드라이브를 활성화하는 것 같음. 결과적으로 노트북과 SSD 모두 열이 나고 배터리가 금방 소모됨. 유일한 대처 방법은 잠자기 전에 모든 외장 드라이브를 분리하고, 충전기에 꼽아두는 것뿐임. 꽤 번거로운 버그임. 품질 관리와 테스트가 부족했다는 생각임