Macを再起動せずに使い続けていると、ある日突然動作が極端に重くなりネットに繋がらなくなる。そんな奇妙な現象の原因が、macOSの奥底に潜む「49日問題」であることが明らかになった。
ノートPCを閉じるだけのスリープ運用が当たり前になった現代。多くのユーザーが知らず知らずのうちに、この時限爆弾のスイッチを押している。
不具合の引き金となるのは、Macの電源を入れてからちょうど「49日と17時間2分47.296秒」という正確なタイミング。
原因はネットワーク接続を管理する仕様にある。macOSは通信の継続時間などを計測する際、32ビットのカウンターを採用している。このカウンターが格納できる上限値は「2の32乗」ナノ秒。これを日時に換算した限界点が、先述の約49日なのだ。
稼働時間がこの上限を突破した瞬間、カウンターがオーバーフローを起こして処理を停止。本来なら速やかに破棄されるべき過去のネットワーク通信がシステム内に滞留し始める。
結果としてCPUの負荷が異常に跳ね上がり、通常1万6384個用意されているポートを次々と食いつぶす。やがて新規のTCP接続が一切できなくなり、ブラウザを開いてもアプリを立ち上げても通信エラーを吐き出す仕組みだ。
厄介なのは、すでに確立されている古い通信やping応答はそのまま生きているため、ユーザー側からは原因不明の回線トラブルに見えやすい点。セキュリティ研究を主導するPhotonの分析により、ようやくこの不具合の全貌が浮き彫りとなった。
ベテランのPCユーザーであれば、この「49日」という数字に強烈な既視感を覚えるはずだ。かつてのWindows 95や98も、連続稼働49.7日でOSがクラッシュする有名なバグを抱えていた。2038年にLinuxなどUNIX系OSが誤作動を起こす「2038年問題」も同根のトラブル。
高性能なAppleシリコンを積み、高度な処理を涼しい顔でこなす最新のMac。その裏側で、令和の時代にこれほどレガシーな設計ミスが露呈したのは非常に興味深い。
現時点でユーザーができる有効な対策は「定期的な再起動」の一択。システムを再起動すればカウンターはゼロにリセットされ、再び49日間の猶予が生まれる。
Appleは遠からず、マイナーアップデートでこの32ビットの時限爆弾をひっそりと取り除くはずだ。修正パッチが降ってくるまでは、月に一度はMacを完全にシステム終了させる。そんなアナログな習慣が、最先端のデバイスを快適に保つ鍵となる。
Source:Photon

