今年、2015年7月1日にうるう秒がありますね。
http://internet.watch.impress.co.jp/docs/news/20150501_700381.html
「うるう秒」まであと2カ月――7月1日午前の「8時59分60秒」挿入に備えて確認を -INTERNET Watch
原子時計を基準とする原子時に対し、地球の公転や自転を基準にする天文時が少しずつ遅れているため、数年に一度「うるう秒」を挿入して調整します。
今年の7月1日のUTC 00:00:00にうるう秒が挿入されます。(JSTで09:00:00)
こんな感じです。(JST)
2015/7/1 08:59:58
2015/7/1 08:59:59
2015/7/1 08:59:60 ←挿入される「うるう秒」
2015/7/1 09:00:00
2015/7/1 09:00:01
これ、コンピューターシステムの世界ではちょいちょい問題になるんですよね。
特に
Linuxではカーネルバージョンやntpdのパッケージバージョンによっては、OSがハングアップするなどの様々な問題が実際に発生するみたいです。(うるう秒対応の仕様や、実装上のバグなどが絡んでいるみたいですが)
WindowsはOSレベルでは問題はありません。
Windowsでは、うるう秒は無視してシステム時計が進んでいくので、うるう秒に対応したNTPと比較すると、09:00:00には1秒進んだ状態になります。
しかし次回の時刻同期の際に時計が1秒戻されて、NTPサーバーと一致します。
この「1秒戻す」ですが、時計を逆戻りさせて一気に一致させるか(Stepモード)、それとも時計の進み方を少しだけゆっくりにして徐々に補正するか(Slewモード)は、設定によります。
また
SQL Serverや
Oracle Databaseなどの主要なソフトウェア(ミドルウェア)は、基本的にはうるう秒の影響は受けません。
内部的には連番で管理され、トランザクションの処理中に時計が進んだり戻ったりしても、処理は正しく継続します。
ただし時刻を指定してリカバリするような処理など、一部は影響が発生する場合もあるようです。
また当然ですが、データベースのデータ型としての「時分秒」に、「60秒」をセットするとデータを書き込む際にエラーとなります。
データベースの時刻型は、うるう秒を意識していない(想定していない)からです。
Windows関連の情報
http://support.microsoft.com/kb/2722715/ja
うるう秒に関するサポートについて
http://support.microsoft.com/kb/909614/ja
うるう秒に関する Windows タイム サービスの処理
http://support.microsoft.com/kb/939322/ja
高精度の環境に向けた Windows タイム サービスの構成を目的とするサポート範囲
http://support.microsoft.com/kb/2722681/ja
Windows Time サービスにおける時刻同期の仕組み
VMware関連の製品ですが、アプライアンスである
vCenter Server Applianceの一部バージョンではうるう秒の影響があるようです。
これはアプライアンスに組み込まれているOSである、 SUSE
Linuxが原因のようです。
VMware ESXiや、Windows版の
vCenter Serverは問題ありません。
VMware関連の情報
http://kb.vmware.com/kb/2115818
VMware KB: Support for leap seconds in VMware Product
Oracle DatabaseはKROWNに掲載されているので、詳細については触れません。
例えば、こんなドキュメントとかを見てください。
KROWN:33273 うるう秒について
KROWN:16785 システム時刻の変更にともなう注意点
Linuxは私の専門外なので、割愛します。
さてここからは、とあるシステムでのうるう秒の影響を調査していて出てきた話です。
なんと「時計が逆戻りすると動作に問題が出るアプリケーション」がありました。
システム全体の窓口SE、パッケージを担当するSE、製品部門、お客様、いろんな立場の人と話しましたが、皆さんは「時計を逆戻りしないようにして」と簡単に言います。
でも、(うるう秒は関係なく)時計はずれるものです。
ずれる、時計を合わせる、ずれる、時計を合わせる。これを繰り返します。
時計をずれなくする魔法はありません。
対象のサーバーを調べましたが、数年運用してみて、時計のずれが多い時は10数秒程度でした。
NTPによる時刻同期を設定していれば、まあそんなもんでしょう。
Windowsでワークグループ環境なら、既定値ではずれが1秒を超えたら一気に時計を合わせます。
それ以内なら、時計を少し早目に進め(または少しゆっくりと進め)、徐々に時刻を補正します。
だからアプリケーションがシステム時計に対し、「時計を逆戻りしないように」を要求するのは現実的には無理な要求です。
時計を逆戻りしない範囲を、標準の1秒から、例えば5分とか10分に変更する事は出来ます。
それでも、その範囲を超えたら結局は一気に時計を戻します。
この範囲を極端な話、たとえば1日にしてもいいのですが、こんなにずれたら事実上いつまで待っても時計が合わないままになります。
(
LinuxのSlewモードでは1秒の補正に2000秒。Windowsの補正度合は非公開)
Windowsの時刻同期のSlewモードとStepモードについては、この記事が参考になります。
http://blogs.technet.com/b/jpntsblog/archive/2012/12/28/slew-step.aspx
Windows Time サービス - Slew モードと Step モード - - Ask the Network & AD Support Team - Site Home - TechNet Blogs
http://blogs.technet.com/b/jpntsblog/archive/2013/02/28/step.aspx
絶対 step モードで時刻同期させたくない場合の設定方法について - Ask the Network & AD Support Team - Site Home - TechNet Blogs
以下、あるソフトウェアに対する愚痴です。
システム時計はハードウェアクロックと、OSの時刻同期の仕組みで動作します。
最近ではVMwareなどの仮想マシンが主流なので、さらにVMware ToolsによるESXiホストとの時刻同期なども加わり、時計合わせも複雑です。
最近調べたある
Linux仮想マシンは、予期せずにntpdが起動しない状態で運用され、数分も時計がずれていました。
ハード故障、人的ミス、ネットワーク障害、予期しないサービスの停止などで、時計が大きくずれる可能性はいつでもあります。
某パッケージソフトは「システム時計が進んでしまったら、実際の時刻(NTPサーバー)がそれに追い付くまでサービスを停止したままにし、時刻が追い付いたらサービスを開始する」が解決策として書かれていました。
これが何を意味するか分かりますか?
そう、こんな運用をしろって事です。
・時計が1時間ずれたら、1時間サービスを停止したままにする。
・時計が1日ずれたら、1日サービスを停止したままにする。
・時計が1か月ずれたら、1か月サービスを停止したままにする。
時刻同期が正常にできていればこんな事は無いのですが、予期しない障害で時計が大きく進んだら、長期間に渡って業務を停止しなければならない事になりますよね。
これは単なる「制限事項」では片づけられない、致命的で重大な不具合です。
よくこんな製品を世に出したと思う。これを知った時はショックで声も出なかった。
ほんと、改善して欲しい。
テーマ : Windows
ジャンル : コンピュータ