涼の成長記録

自らの人生に主導権を持つべく、独立を目指して2014年3月31日を持ってITエンジニアを退職。そんな23歳♂の成長記録。

497日問題

前置き

社内で、497日問題が何たらー、というメールがCcで回ってきました。そういえば、そんなの聞いたことあるなーと思い、少し調べてみました。概要や問題、対象OS等については、以下にあります。

Windows Vista、Windows 7、Windows Server 2008 および Windows Server 2008 R2 で、システム起動から 497 日経過すると、TIME_WAIT 状態であるすべての TCP/IP ポートが閉じられない

497 日以上連続稼動させたときに生じる問題について - Ask the Network & AD Support Team - Site Home - TechNet Blogs


要するに、コンピューターを起動してから497日経過したら、動作がおかしくなるよ、といった内容です。何故497日連続稼働できないのか、というお話でございます。



何故?

コンピューターは起動時から"uptime"という、現在コンピューターが稼働状態にある時間をカウンターを、10msec毎にカウントアップしています。カウンター値は、0からスタートするのですが、このカウンターは32bitで設けられています。つまり、16進数で、0x00000000から0xffffffffまでカウントできるということです。


で、このカウンターが0xffffffffを迎えるのは、42949672950msec経過した時で、コンピューターを起動してから497日2時間27分52秒と950msecです。この時間を超えてカウントアップすると、0x100000000になります。しかし、カウンターは32bitしか設けられておりませんので、下位32bitが採用されます。そのため0x00000000に戻ってしまうというわけです。これがいわゆる、オーバーフローというやつです。



開発システムの寿命

いつも開発しているシステムは、平気で10年以上稼働したるするものなので、こういうのも知っておかなければならないな、と感じました。2038年問題とかも、真剣に考えておく必要があるかもしれません。
ではでは。