閏秒挿入でなぜ多くのシステムがダウンするのか
解決済
回答 2
投稿 2017/01/13 01:17
- 評価
- クリップ 8
- VIEW 2,508
今年の元旦、8時59分60秒が挿入されたことで、多くのエンジニアの年末年始が仕事に追われる日々だったのではないかと思われます。そこで閏秒を挿入することで同期がおかしくなるということなのでしょうが(そもそもこの認識が間違っているのならご指摘下さい)この”おかしくなる”の詳細がわからず調べていたのですが、詳しく踏み込んだ説明はあまり見当たりません。CPU使用率が100%になりサーバーがダウンするということがあるというのも見つけたのですが、先の認識とCPU使用率の増加がいまいち繋がりません。どなたかご教授いただけないでしょうか。
-
気になる質問をクリップする
クリップした質問に回答があった場合に通知・メールを受け取ることができます。
クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+17
大きなポイントとして3つ有るかと思います。
1つはタイムアウト判定などの時刻間計算のロジックが閏秒の挿入により狂う(8時59分59秒と9時00分00秒の差は閏秒により正しくは2秒であるが、1秒と算出してしまう)ことによる計算結果矛盾の発生。これをアプリがエラーとして検出するケース。
1つは時刻のバリデーションチェックで59秒以上(60秒という数値)を弾いてしまい、エラーとして検出してしまうケース。
1つは閏秒のわずか1秒間でもコンピュータは何万命令も実行するため、運悪く閏秒のタイミングにエラー検出してしまい大量のエラーメッセージを出力してしまい運用対応が混乱してしまうケース。
特にDataBaseシステムが閏秒をエラーとして検出すると、自分自身の振る舞いに異常を検出したと判断してDataBase自体が動作を止めてしまうケースが考えられ、こうなると被害は甚大です。
ですが、閏秒については実施の事前に情報が公開されるのでDataBaseシステムのパッチやアプリケーション改修などによってベンダー対応が入ることが一般的です。それでも先に書いたように閏秒の1秒間でもシステムは何万もの命令を実行するため、テストだけでは再現しきれないコンディションも存在します。そんなコンディションのタイミングで初めて露見するバグ(障害)に当たり、運用対応が必要になるケースも有るかも知れません。
エンジニアとしては必要なパッチを全て当てて、事前に閏秒のコンディションを作って検証して不具合を出し切り、当日は警戒感をもって待機するしかないかと思います。私の2000年対応もそのような感じでした。閏秒については机上確認で影響は有り得ない(DataBaseは使用していないなど、システムの性質として発生確立は非常に低い)と判断してゆるめな対応になりました。
投稿 2017/01/13 02:29
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
以下のような回答は評価を下げられます
- 間違っている回答
- 質問の回答になっていない投稿
- 不快な投稿
評価を下げる際はその理由をコメントに書き込んでください。
+3
先の認識とCPU使用率の増加がいまいち繋がりません。
おそらく linux kernel でのトラブルの話をされているのかと思います。
それを前提にものすごくざっくり説明します。
この時の bug では、うるう秒挿入時に CLOCK_REALTIME を1秒巻き戻したのに、
clock_was_set() を呼び忘れたことです。
この状況では、高精度カーネルタイマ(hrtimer) の処理時に1秒ずれが生じた状態になります。
このため、hrtimer でタイマーを設定すると1秒早くタイマーが終了してしまう状況になります。
ここで問題なのは1秒未満のタイマーを設定した場合で、1秒未満のタイマーを設定した際に
即座にタイマーが終了してしまいます。
タイマーが切れたため、プログラムはタイマー切れの処理を行います。
タイマー切れの場合に必要な処理を行い、再度タイマーを設定するプログラムであった場合、
この一連の処理はループします。
これらのプログラムが複数呼び出された場合は、システム全体の負荷が高くなります。
1秒ずれた状態は clock_was_set() を呼びだすまで解消されないため、
うるう秒処理後から1秒未満のタイマーを設定する様なプログラムで
高負荷の状況を生み出す事になります。
この問題の解消は clock_was_set() を呼びだして1秒のずれを解消する事です。
date コマンドで解消する記事が多くあると思いますが、それは内部で clock_was_set() を
呼びだしているからです。
投稿 2017/01/17 15:05
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
以下のような回答は評価を下げられます
- 間違っている回答
- 質問の回答になっていない投稿
- 不快な投稿
評価を下げる際はその理由をコメントに書き込んでください。
15分調べてもわからないことは、teratailで質問しよう!
92.18%