Mac을 몇 주 동안 재시동하지 않고 실행했는데 느리게 느껴지는 경우에는 매우 구체적인 이유가 있습니다. Photon의 연구원들은 시한폭탄과 똑같은 기능을 하는 macOS 버그를 발견했습니다.
49일 17시간 2분 47초의 지속적인 가동 시간이 지나면 Mac은 조용히 새로운 인터넷 연결을 설정할 수 없게 됩니다. 앱이 작동을 멈추고, 웹사이트가 로드되지 않으며, CPU가 예상보다 훨씬 더 열심히 작동하기 시작합니다.
그렇다면 Mac 내부에서는 정확히 무슨 일이 일어나고 있나요?

버그는 macOS가 네트워크 연결 관리 시간을 추적하는 방식에 있습니다. 운영 체제는 최대 4,294,967,295밀리초의 값을 보유할 수 있는 32비트 카운터를 사용합니다. 이 한도는 정확히 49.7일의 연속 런타임에 해당합니다.
해당 숫자에 도달하면 자동차 주행 거리계가 최대값에서 0으로 돌아가는 것처럼 카운터가 오버플로되어 롤백됩니다. 이 시점이 되면 macOS는 완료된 네트워크 연결을 올바르게 닫는 기능을 잃게 됩니다. 이러한 죽은 연결은 정리되는 대신 쌓이기 시작합니다.
Mac에는 약 16,384개의 연결 포트가 있습니다. 종료되어야 할 연결이 일단 채워지면 새로운 연결이 형성될 수 없습니다. 그런 다음 CPU는 아무 목적도 없는 수천 개의 연결을 관리하는 데 점점 더 많은 노력을 기울이고 있으며, 이것이 바로 속도 저하가 실제로 느껴지는 이유입니다.
그런데 Mac이 이미 작동을 멈추지 않은 이유는 무엇입니까?

글쎄, 이상한 부분은 모든 것이 깨지는 것은 아니라는 것입니다. 핑은 여전히 작동하며, 오버플로 이전에 이미 열려 있던 모든 연결은 계속해서 정상적으로 작동합니다. 실패하는 것은 새로운 연결뿐이므로 버그가 일관되지 않고 무엇을 찾아야 할지 모르고 진단하기 어렵게 만듭니다.
이 종류의 버그는 새로운 것이 아닙니다. Windows 95와 Windows 98은 동일한 근본적인 이유로 49.7일 만에 충돌이 발생한 것으로 유명합니다. 일부 Linux 시스템은 자체 32비트 시간 카운터가 한계에 도달하는 2038년 1월 19일에 관련 문제에 직면합니다. 이제 macOS에도 같은 종류의 문제가 있는 것으로 확인되었습니다.
Mac 속도가 느려지는 것을 방지하는 방법은 무엇입니까?
지금 당장 해결 방법은 간단합니다. 49일이 되기 전에 Mac을 다시 시작하면 됩니다. 재부팅하면 카운터가 0으로 재설정되고 다시 재부팅되기까지 49.7일이 더 걸립니다.
Photon은 전체 시스템 재시작이 필요하지 않은 소프트웨어 수준의 해결 방법을 연구 중이지만 그것이 도달할 때까지는 정기적인 재부팅이 최선의 선택이라고 말합니다.