맥이 잠자기(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

안드로이드 배터리 사용 분석

아이폰에서 안드로이드로 기변 후 배터리가 너무 빨리 닳는 것이 아닌가 하는 생각이 들어 좀 확인해보니 미래에셋 MStock 프로그램이 슬립에 진입하는 것을 막고 있었다. 이걸 지우고 나니 깔끔하게 해결이 됐다.

배터리가 오래 가지 않는 이유는 화면이 켜져있기 때문이 그 첫번째, 그리고 다음이 AP가 슬립모드에 진입하지 않기 때문이다. 화면이 꺼져있더라도 AP가 슬립모드이냐 아니냐의 여부에 따라 배터리 사용량은 천지 차이이다.

이번에 발견한 미래에셋 프로그램의 문제는 AP가 슬립중인 상태에서 뭔가의 이벤트로 AP를 깨운 후 오랜 시간동안 AP를 슬립에 진입하지 않게 한다는 것이다. Facebook같은 SNS 서비스의 푸시 알림이나, SMS 문자들을 핸드폰이 수신을 하면 AP를 깨우고 그에 대한 처리를 하게 된다. 이런 일이 불규칙적으로 자주 일어나게 되는데 할일을 하고 다시 슬립에 바로 진입해야 배터리가 덜 닳는다. 그런데 미래에셋 프로그램은 깨어난 후 한시간, 두시간을 깨어있게 만들 때가 부지기수였다. 처음에는 위젯때문에 그런가 하고 위젯을 제거해봤지만 마찬가지였다. 도대체 트레이딩 프로그램이 왜 밤에 깨어나서 배터리를 갉아먹고 있는 것인지를 모르겠다.

결론은 프로그램 삭제. 이런 프로그램은 사용하면 안된다. 핸드폰에서 주식 거래할 일이 거의 없기 때문에 굳이 유지할 필요가 없고, 주가지수야 포털에서 실시간으로 확인할 수 있으니 더이상 필요 없다 생각했다.

배터리 기록 상세정보
배터리 기록 상세정보

화면이 꺼져있는데 사용중이 길게 늘어져있다면 무엇인가가 쓸데없이 배터리를 갉아먹고 있는 것이다. 사실 지금도 지나치게 굵게 표시되는 구간이 있어서 좀 더 봐야 할 것 같다.

Kitkat 이전버전에서는 wakelock을 걸고있는 프로세스 정보를 루팅 없이 볼 수 있었던 듯 하다. 그러나 Kitkat에서는 WLD(wake lock detector)등의 프로그램을 사용할 수 없는 상태이다.