iMac 잠자기 안되는 문제 (OSX 10.15 Catalina)

카탈리나 업그레이드 이후 맥이 잠자기가 되질 않는다. 검색을 좀 해보니 동일한 문제를 겪는 사람들이 있는 것 같다. 10.15.3 업데이트가 설치된 지금까지 해결되지 않았다.

https://discussions.apple.com/thread/250933408 내용을 보면 동일하다. UserEventAgent 프로세스가 sleep 진입을 막고있다. apfs 관련 wbc_drain이라는 작업을 하는 것으로 보이는데 top으로 보면 sleeping 상태다. 도대체 뭘 위해 잠자기를 막고 있는건지 모르겠다. 화면만 꺼진 맥이 몇 달 째 전기만 왕창 잡아먹었을 듯.

catalina 이미지 검색결과

MacOS 10.15 Catalina

신기한건 회사에서 업무용으로 사용하는 맥은 괜찮다는거다. 회사 맥은 2017년 5K 모델이고, 집에 있는 맥은 Late 2013 모델이다. 동일하게 둘 다 Fusion Drive를 사용한다.

맥에 Catalina를 클린 인스톨 해 봐도 동일한 문제가 발생한다. 동일한 설정에서 모하비에서는 문제가 없었다.

pmset -g 커맨드를 쳐 보면 sleep prevented by UserEventAgent가 없어지질 않는다. 이 상태에서는 맥이 절대로 슬립에 진입하지 않는다.

cky@iMac ~ % pmset -g           
System-wide power settings:
Currently in use:
 standby              0
 Sleep On Power Button 1
 womp                 1
 halfdim              1
 hibernatefile        /var/vm/sleepimage
 powernap             0
 autorestart          1
 networkoversleep     0
 disksleep            10
 standbydelayhigh     86400
 sleep                1 (sleep prevented by UserEventAgent)
 autopoweroffdelay    28800
 hibernatemode        0
 autopoweroff         1
 ttyskeepawake        1
 displaysleep         10
 highstandbythreshold 50
 standbydelaylow      86400

pmset -g assertions 쳐 보면 apfs 관련된 것 때문이라는 것을 알 수 있다.

cky@iMac ~ % pmset -g assertions
2020-02-06 23:44:44 +0900 
Assertion status system-wide:
   BackgroundTask                 1
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  1
   PreventUserIdleSystemSleep     1
   NetworkClientActive            0
Listed by owning process:
   pid 147(hidd): [0x0000001b0009808e] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle serviceID:10000047f name:AppleHIDKeyboardEve product:Apple Keyboard eventType:3"  
	Timeout will fire in 600 secs Action=TimeoutActionRelease
   pid 104(powerd): [0x0000000f00088008] 01:26:49 ExternalMedia named: "com.apple.powermanagement.externalmediamounted"  
   pid 92(UserEventAgent): [0x000010f3000b88dc] 00:14:46 BackgroundTask named: "com.apple.apfsd.wbc_drain"  
	Created for PID: 2256. 
Kernel Assertions: 0x10c=USB,BT-HID,MAGICWAKE
   id=502  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14900000 owner=External
   id=504  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14400000 owner=Keyboard Hub
   id=506  level=255 0x100=MAGICWAKE mod= description=llw0 owner=IOSkywalkNetworkBSDClient
   id=507  level=255 0x100=MAGICWAKE mod= description=en0 owner=en0
   id=508  level=255 0x8=BT-HID mod= description=com.apple.driver.IOBluetoothHIDDriver owner=BNBMouseDevice
Idle sleep preventers: IODisplayWrangler

그래서 불편하지만 어쩔 수 없이 전원을 끄고있다. 2007년부터 맥을 사용해왔는데 맥의 전원을 끄고 쓰는건 지금이 처음이다. 빨리 해결됐으면 좋겠다.

맥이 잠자기(Sleep)를 유지하지 못하는 현상

언제부터인가 맥이 잠자기를 유지하지 못하는 듯한 느낌이 있어서(HDD가 멈췄다가 돌아가는 소리가 자주 들리는 듯 했다) 분석을 좀 해 보니 가관이었다. 맥이 잠자기를 유지하지 못하고 1분정도 주기로 계속 깨어나고 있었다.

아래 로그를 보면 Network 인터럽트로 인해서 맥이 깨어났다는 것을 확인할 수 있다. 로깅 시간을 보면 거의 1분 마다 한번씩 로그가 나온다. 로그에 보이는 초단위의 시간이 잠자기를 유지한 시간이다. -_-

imac:~ cky$ pmset -g log | grep "Entering Sleep state"
2017-03-24 07:19:53 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 9 secs    
2017-03-24 07:20:47 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:21:45 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:22:43 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:23:40 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:24:39 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:25:38 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:26:36 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:27:34 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:28:31 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 15 secs   
2017-03-24 07:29:32 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 11 secs   
2017-03-24 07:30:29 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:31:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 12 secs   
2017-03-24 07:32:24 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 17 secs   
2017-03-24 07:33:27 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:34:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 13 secs   
2017-03-24 07:35:25 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 15 secs   
2017-03-24 07:36:25 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 8 secs    
2017-03-24 07:37:19 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 7 secs

먼저 시스템 환경 설정에서 Network 요청에 의한 깨우기를 꺼봤다. 그랬더니 역시나 잠자기가 유지가 된다. 뭔가 Network 패킷에 의해서 깨어나는 것은 확실해 보였다.

시스템 환경 설정 > 에너지 절약

다음으로 tcpdump를 실행해보았다. 그랬더니 이상한 IP로부터 ssh 연결이 끊임없이 들어오고있는 것이 아닌가. ssh 연결을 위한 22번 포트는 내가 외부에서 사용할 목적으로 열어둔 포트다. 그런데 이 포트로 요청이 계속 들어오니 맥은 깨어날 수밖에 없는 것이었다.

IP를 차단할 수 있는지를 타임캡슐에서 살펴보았는데 firewall 기능이 거의 없다시피해서 따로 설정하는 메뉴가 없는 것 같았다. iptime같은 공유기를 쓴다면 IP를 걸러낼 수 있지 않을까 싶다.

도통 패킷이 멈출 기미가 안 보여서 포트를 변경하기로 했다. 외부 포트를 22번이 아닌 다른 것을 쓰고 그 포트를 내부 22번으로 연결시켰다.

Airport 유틸리티 > IPv4 포트 매핑

ssh 연결 요청이 맥에 도착하지 않으니 맥이 잠자기를 잘 유지한다. 로그를 보니 두시간 마다 한번씩 깨는데, 이는 요청시 깨우기 및 Bonjour 잠자기 프록시에 의한 정상적인 동작이다. (https://support.apple.com/ko-kr/HT201960)

아래는 ssh 포트 변경 후 어젯밤 상황을 잡은 로그다. 잠자기가 길게 유지되는 것을 명확히 확인할 수 있다. Idle sleep(아무것도 하지 않아 잠자기에 들어가는 것)으로 잠자기에 진입 후 아침까지 계속 잠자기가 유지되었다. 🙂

imac:~ cky$ pmset -g log | grep "Entering Sleep state"
2017-03-24 17:41:57 +0900 Sleep               	Entering Sleep state due to 'Software Sleep pid=104': Using AC 566 secs  
2017-03-24 18:10:31 +0900 Sleep               	Entering Sleep state due to 'Idle Sleep': Using AC 5446 secs 
2017-03-24 19:42:02 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 5315 secs 
2017-03-24 21:11:23 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 4558 secs 
2017-03-24 23:49:20 +0900 Sleep               	Entering Sleep state due to 'Idle Sleep': Using AC 4793 secs 
2017-03-25 01:09:59 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 02:58:08 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 04:46:17 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 06:34:26 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 6443 secs 
2017-03-25 08:22:35 +0900 Sleep               	Entering Sleep state due to 'Maintenance Sleep': Using AC 5109 secs