Home

技術系のメモと日々の雑感

Domain-U 側で independent_wallclock の設定

Xen の Domain-0 と Domain-U で別々に時刻を設定するためにカーネルパラメータ independent_wallclock に 1 をセットする話の続き。
この前、とある Xen 環境の Domain-0 側で設定してみたら有効にならなくて、Domain-U 側では時刻が変更できなかった。
過去にやったときはこれで何の問題もなかったんだけどな。
特殊なハード構成でもないし、あきらめようかと思いつつ、ひょっとして Domain-U 側で設定したらどうなるのかと思って試してみたら、こっちでもいけることが分かった。
ふ〜ん。
こういうパターンもあるのか〜。
Domain-0 で一括で設定できた方がうれしいんだけど、まぁしょうがないね。

xm info の free_memory について

Xen の Domain-0 のメモリ使用量って何だか謎なところがあるね。
先日、実メモリ 2GB で、Domain-U にそれぞれ 400MB 割り当てて 4 つぐらい運用する想定のサーバの様子を見ていたときのこと。
全体でのメモリの空き容量はどこを見ればいいんだろうと思いながら、xm info の free_memory をチェックしていたら、Domain-U を 3 つ起動した時点ですでに 0 になっていた。
正直ちょっと焦った。
でも、ここからさらに Domain-U を起動することは可能。
xm top とか xm list を見たら Domain-0 のメモリの使用量が減っているのが分かる。
どうやら、xm info の free_memory は Domain-0 にも Domain-U にも割り当てられてない空きメモリの量みたいだね。

Domain-U のシステムクロック停止

とある Xen のサーバで Domain-0 の時刻が進んでいるのに気づいて、ntpdate を実行したときのこと。
前にも書いた通り、Domain-U 側はデフォルトで Domain-0 の時刻に同期するので、こういう場合でも放っておいていいんだけど。
何気なく Domain-U のシステムクロックを見たら・・・、止まってる!
そして、そのまま眺めていたら、間もなく無事に動き始めた。
なるほど。
Domain-U の方が進んでいるときは、Domain-0 が追いつくまで待つのか。
面白い動きだな〜。

xenconsoled を止めないために

Xen を使っていると、xm console を実行したときに

xenconsole: Could not open tty `/dev/pts/2': No such file or directory

というメッセージをよく見るね。
ご存知の通り xenconsoled が落ちてるせいだ。
暇なときに、根本的に落ちないようにする方法はないのかと思って調べてみたけど見つけられなかった。
起動しなおせば済むんで原因を追及する人がいないんだろうね。
ということで、自分も対症療法として

#!/bin/sh
pgrep xenconsoled > /dev/null 2>&1
if [ $? -ne 0 ]; then
  /usr/sbin/xenconsoled
fi

というスクリプトを /etc/cron.hourly に入れておく。
関係ないけど pgrep 便利だな〜。

Domain-U のゾンビ

CentOS5.3 の Xen 環境で、ある日、Domain-U のひとつがゾンビになってしまった。
xm list で見るとドメイン名の頭に「Zombie-」が付いているので一目瞭然。

# xm list
Name                    ID Mem(MiB) VCPUs State   Time(s)
Domain-0                 0     1763     2 r-----     44.9
Zombie-hogesite          4      249     1 -b----      0.0

state が c(crashed) とか d(dying) じゃないのでそんなに深刻ではないのかなぁ、と思いつつ、xm shutdown とか xm destroy を実行してみたらどちらもまったく反応なし。
そこで一旦 xendomain を stop してみると

# /etc/rc.d/init.d/xendomains stop
Shutting down Xen domains: Zombie-hogesite(save).....Error: Domain '1' does not exist.
/etc/rc.d/init.d/xendomains: line 181: 4240 終了しました     watchdog_xm save
 SHUTDOWN_ALL .All domains terminated
/etc/rc.d/init.d/xendomains: line 299: 4240 終了しました     watchdog_xm save
[done]                                        [ OK ]
/lib/lsb/init-functions: line 21: 4433 終了しました     watchdog_xm shutdown 1

どうやらゾンビになった Domain-U が save されたみたい。
もう一度 xendomains を起動してみると

# /etc/rc.d/init.d/xendomains start
Restoring Xen domains: Zombie-hogesite.
[done]                                        [ OK ]

リストアが走って復活してしまった。
復活しなくていいのに・・・。
文字通りゾンビだね。
しょうがないので保存されたステートファイルがどこに置いてあるのか探してみる。
/etc/rc.d/init.d/xendomains を見てみると $XENDOMAINS_SAVE という変数があるので、保存されるディレクトリはここだろうとあたりをつけて /etc/sysconfig/xendomains を見たら、この変数に /var/lib/xen/save がセットされていた。
試しに、もう一度 /etc/rc.d/init.d/xendomains stop してから /var/lib/xen/save を見たら

# ls -l /var/lib/xen/save
合計 256340
-rwxr-xr-x 1 root root 262214481  5月  7 11:53 Zombie-hogesite

やっぱりここか。
このファイルを削除してから、再度 xendomains を start したら今度こそ消えてくれた。
この後、ゾンビになった Domain-U のイメージファイルが壊れているのに気付いてヘコんだけど、xendomains の動きがちょっとだけ分かったので、まぁ、プラマイゼロってとこかな。