Windows Server 2008を497日以上稼働させるとTCP/IPポートが枯渇するとか


結構大きな問題なのに、あんまり騒いでいる人がいないので書いてみます。

Windows Vista / Windows 7 または Windows Server 2008 / Windows Server 2008 R2 において、497日以上連続稼働した場合に TCP/IP ポートが閉じられない現象が発生するようです。対象となるポートは TIME_WAIT 状態のもので、ずっと通信中なら問題ないっぽい。
この問題が発生すると、ActiveDirectoryのレプリケーションに失敗したり、SQL Server に接続できなかったり、ファイルサーバの共有ファイルにアクセスできないという現象がでてしまいます。

原因としては、システム起動後の経過時間タイマカウンタがオーバーフローしてしまうというもの。
32bit符号なしで起動後の経過時間を管理しており、497日目に429億4967万2950(497日2時間27分52秒950ミリ秒)をカウントしてしまいます。それ以降はカウントすることが出来ないため、OSからウィンドウメッセージWM_TIMERの送信が行われなくなります。

対処法としては、下記リンク先の修正プログラムをインストールする必要があります。
http://support.microsoft.com/kb/2553549/

次のOSのみ修正プログラムを適用できます。
* Windows Vista Service Pack 1 (SP1)
* Windows Vista Service Pack 2 (SP2)
* Windows Server 2008
* Windows Server 2008 Service Pack 2 (SP2)
* Windows 7
* Windows 7 Service Pack 1 (SP1)
* Windows Server 2008 R2
* Windows Server 2008 R2 Service Pack 1 (SP1)

F5 NetworksのBig-IP ver9系でも同じよな497日問題がありましたが、たぶん現象から見て同じような原因で起きているんでしょうね。
なぜか個別パッチなのがアレです。Windows Updateで配信してくれたらいいのに。
サーバでポート開けないのは致命的なので、修正パッチ適用必須ですよ。

信長は俺の嫁。 オンラインゲーム

5 Comments

  • ちゅんつ
    2012/01/16 - 22:48 | Permalink

    おおお!あぶないあぶない、現在のPJに確実に影響でますね。情報ありがとうございます。

  • ちゅんつ
    2012/01/17 - 23:42 | Permalink

    ほんとに通信していれば大丈夫ですか?

    • やまひで
      2012/01/18 - 00:07 | Permalink

      497日以上連続稼働した場合、 TIME_WAIT 状態のTCP/IP ポートが閉じられない問題のようなので、ESTABLISHED の場合は通信できているはずです。まぁ、そのあと TIME_WAIT になり CLOSING へ移行できずにポートが枯渇するので、497日以上たったら無理と考えてもよいと思いますが・・・。
      それ以外にも、タイムアウト待ちの TIME_WAIT がないパッシブ・クローズなら影響ないと思います。

  • くに
    2013/02/20 - 17:29 | Permalink

    ちなみに KB2553549 の「セキュリティ更新プログラムの情報」にもあるように、Windows Server 2008 R2 だと、この修正は、Windows Update で配信されている MS12-032 (KB 2688338) に含まれています。

    • やまひで
      2013/02/21 - 00:11 | Permalink

      情報ありがとうございます。
      2012年5月以降は、Windows Updateで修正されるんですね。知りませんでした。

  • コメントを残す

    メールアドレスが公開されることはありません。