Microsoftサポートオンラインなどを見ると、WindowsOSが起動してから497日とか49.7日とかで挙動がおかしくなる、なんていう情報がいくつか見つかります。
(http://support.microsoft.com/kb/811756/ja http://homepage2.nifty.com/ADSN3/soft.htm#a27 http://www.wdic.org/w/TECH/497%E6%97%A5)など
たとえば、OSを起動してからの時間(Uptime)を10ミリ秒単位で数えていて、Uptimeを表す変数が32ビットの場合には、10ミリ秒×4294967295((2の32乗)-1)をかけた値、約497日でオーバーフローします。1ミリ秒だった場合にはその1/10、49日(もう少しいうと49.7日)でオーバーフローします。
こちらは変数が「unsigned=符号なし」の場合ですが、「signed=符号あり」でUptimeを定義した場合には、時間換算に負の数の範囲を使わないため、さらにこの時間は半分になります。たとえば「248日」でオーバーフローする、という感じです。
そして、Uptimeの変数がオーバーフローするタイミングで、(起動時間の変数をどう使っているかにもよりますが)いろんな動作がおかしくなる、ということです。一部の動作がおかしくなる場合もあれば、Windows98のようにハングしてしまう場合もあります。
まあ、Windows98なんぞ1か月以上も連続稼働する、というのもあまりないですよね。本当に小さい会社、それこそ10名規模のところとかだとそれに近い状況もあったのかもしれませんが、そのくらいだとしたら「OSハング=即、金銭的損失につながる」というのも考えにくい気がします。再起動して動いたら、とりあえず「よかったね」というのが普通かもしれません。クライアントOSだったらこんなものでも済みますけどね。
ただ、この手の問題っていうのは、OSだけでなく、アプリケーションであったりとか、ネットワーク機器だったりとか、あらゆるIT製品で起きる可能性があります。ここには書けませんが、ぢろーらももいくつかそういう場面を見てきました。
基本的にOSや機器を再起動すればそこからまたUptimeは数え直しになるわけです。お客さんによっては「うちは1カ月に1回、全機器を定期リブートしてるから問題ないよ」ってところもあるでしょう。しかし、特に一時たりとも止められないようなシステムやネットワークの場合には、これが大問題になる場合もあります。しかもこの手の問題、最初は「なんか知らないけどハングしてる。これって?」という話から出てくるんですけど、たとえばソフトとかの場合だと最初は「OSのせいじゃない?うちじゃないと思うよ」って斬って捨てられるケースとかもあるかと思います。で、しばらくしてもまた同じようなことが起こり、最終的にいろいろあって(お客さんのほうがその周期性を発見して、ということもあるかもしれません)、メーカーがバグを認める、というパターンです。
もちろんこれは大きな問題なので、通常のメーカーであれば原因が分かり次第、高い優先度でバグフィックスを行なうはずです。ただ、それまでの道のりは長いと思います。大きな理由は「再現性を得るまで時間がかかる」ということかと思います。
「起動してからの時間」を表す変数は現在の時間とは独立して数えられていて、要は「現在の時間-起動したときの時間」を参照しているわけではなく、「OSの時刻をずらしたら再現する」というものではないことが多いからです。そんな中、ある程度証拠をつきつけた上でメーカーにソースコードのレビューをさせるところまで持っていかなくてはいけないんです。そうすると場合によっては長期戦ですよね・・・。
まあ、現象が解明できれば、「いつまでに装置をリブートすればいいか」というのはわかりますので、メンテナンススケジュールを立てることはできるかと思います。あとはプログラムの修正を待つしかないですね・・・。
この記事が気に入りましたら、また、お役に立ちましたら、以下のアイコンをクリックしていただけると嬉しいです(^^)
![ブログランキング・にほんブログ村へ](http://www.blogmura.com/img/www88_31.gif)
※コメント投稿者のブログIDはブログ作成者のみに通知されます