うるう秒の影響でVPSのCPU負荷が上昇していたので対策メモ
いまさらな話題ではあるのですが、先日の7月1日 8時59分(日本時間)の「うるう秒」調整で、さくらインターネットのVPSでも影響があったようで、確認と対策をお願いしますというメールが届いたので指示通り対策を行いました。
うるう秒調整は数年に1回程度実施されているので、次回役に立つかも…というか、次回は同じ問題は起きないように対応されるかとは思いますが、一応思い出せるようにエントリしておこうと思います。
うるう秒とは、正確な原子時計による時刻(協定世界時 Coordinated Universal Time, UTC)と地球の自転に基づく時刻(世界時 Universal Time, UT1)の差が±0.9秒以内になるように数年に1度、原子時計の時刻を1秒進める、もしくは戻して調整することです。そして先日、UTC 2012-06-30 23:59:60(日本時間 07-01 08:59:60)に3年半ぶりにうるう秒調整が実施されました。
うるう秒が実施された場合、1分間に61秒あることになりますが、このせいでLinux系のOSや一部のソフトウェアが影響を受けてしまった、ということだったようです。さくらインターネットで使っているOSはLinux系のCentOSなのでモロに影響を受けてしまった、ということになります。自分のサイト見てもとりあえず普段通り動いてはいるようで、目に見えて表示が遅くなっているとかの異変は確認できませんでした。
まず、うちが借りているVPSにも影響があるのか調べてみます。CPUの使用状況を過去1週間のグラフで確認してみると…
まさに7月1日の9時頃から急激に上がっています。その後もジワジワと負荷が上がり続けているようです。
さくらインターネットからは、rootで日付を再設定する、それでもダメならVPSを再起動する、という手順が指示されました。このまま放置しておいても7/6頃にさくらインターネットの方で強制的にサーバ再起動するとのことでほっといても解消されるようなのですが、変なタイミングで再起動されるのも困るので、自分で日付変更することにします。
日付変更はrootでログインして、以下のコマンドを入力するだけ。
時刻形式"月日時分年.秒"(各値ゼロパディング2桁、年のみ4桁)で再設定するようですが、現在時刻が "2012-07-04 12:34:56" の場合、"070412342012.56" ってことでいいんだろか。全然馴染みがないフォーマットなんですが、ロケール依存とかしない書き方なんでしょうかね?
あと、%Cってのも初めて使いました。世紀、年の上2桁(2012年だったら"20")が取得できるそうで、"%C%y"で 年の上2桁(%C→20)と下2桁(%y→12)、”2012"ってのを表示できるんですが、ここに年4桁表記の %Y (%Y→2012)を使うのとは、何か意味が違うんだろか?
少し調べてみたんですけどよくわからないんですよね。詳しい方、教えてください(笑)
でもまあ、今回はそこが問題ではないのでイマイチわかってないまま指示通りコマンドイン。さて、これでCPU負荷は下がってくれるのでしょうか。
しばらくしてから、わかりやすいようにグラフを1日表示にして管理ページをリロードしてみました。
おっ。 うるう秒調整以前の基準に戻りましたね。これで一安心。
まあ、Linux等のソフトウェアがうるう秒を想定していないバグだった、といえばそうなんでしょうけど、そもそもうるう秒調整っていうやり方自体が乱暴な気がします。
だって、コンピュータにいきなり「ここの1分間、61秒にするから!」ってアバウトな指示出して、何事もなかったかのようにスムーズに動かせって方が無茶な気がしますよね(笑) 人間なら「まあ、そういうことにしとくか」ってなんとかなるでしょうけど。もし、いちいちこの61進数を意識しないといけないんだったら気持ち悪いじゃないですか。
原子時計と地球の自転の誤差をなくすことはできないから、うるう秒が発生するのはしかたがないのかもですが、素人考えですけど、今回みたいな調整を行う日に、調整に20時間使って、1時間に0.05秒ずつずらして、うるう秒を誰も意識する必要がない、とかって方法を取るわけにはいかないんですかね? それでもコンピュータには大きなズレになるのかもしれませんけど。なにしろ0.05秒あれば宇宙刑事ギャバンが蒸着できちゃうくらいの時間なわけですし。
次回また何年後にあるのかわかりませんが、それまでには今回影響を受けたソフトは対応を完了してるんでしょうけど、今度はまた別のソフトがまたうるう秒を想定していなくて誤動作するんじゃないかなあ、とか思ってしまいますよね。
うるう年の2月29日で悪影響がないか、なら必ず意識して開発してますけど、いつ実施されるかわからないうるう秒なんて意識して開発したことないですもん。OS周りだけがちゃんと対応してれば絶対大丈夫ってこともないだろうし、どこにどう影響があるかわからないのが気持ち悪いです。
とにかく、コンピュータを正確に動作させるための調整でコンピュータが誤作動を起こしてしまうのではリスクが大きすぎるなあ…と思った今回のうるう秒問題でした。