Solaris zone
solaris10のzoneで問題が発生した。
シャットダウン時に、httpサーバのプロセスの終了がうまく行われず、
プロセスの終了を待ったままハングしていた。
# zoneadm list -vc
ID NAME STATUS PATH BRAND IP
0 global running / native shared
1 zone1 running /export/zone1 native shared
50 zone2 shutting_down /export/zone3 native shared
このステータス=shutting_downというのがくせ者で、どうにもならない。
ベンダーにも連絡し、なんとかしてダンプをとろうと頑張ったのだが
# zlogin -C zone2
でコンソールログインを試みても反応なし。
# zlogin -S zone2
だと、ログインできるが、これはセーフモードなので、
pstackでスタックトレースを取得しようとしても、
pstack: cannot examine : unanticipated system error
でコマンド実行が出来なかった...
仕方が無いので、最終的には
kill -9でハングしていたプロセスを終了させた。
すると、自動的に続きのシャットダウン処理が走り、復旧できた。
でも、ダンプは採れず...
原因が分からない以上再発の可能性がある訳で、あとは、ベンダーの解析力で
何が原因か解る事を祈るのみ。
あと、初めて知ったんだけれど、solarisのzoneでは、
プロセスidは一意なんだって。
つまり、zone1のプロセスidとzone2のプロセスidはかぶる事が無いらしい。
ほんとかよ、initとかどーなってるんだろう?
と思って調べた所、
S ZONE UID PID PPID C PRI NI RSS SZ WCHAN STIME TTY TIME CMD T global root 0 0 0 0 SY 0 0 1月 29 ? 0:57 sched S global root 1 0 0 98 20 1504 2928 ? 1月 29 ? 444:01 /sbin/init S global root 2 0 0 0 SY 0 0 ? 1月 29 ? 0:00 pageout S global root 3 0 0 0 SY 0 0 ? 1月 29 ? 1290:05 fsflush S global root 7 1 0 70 20 8096 16480 ? 1月 29 ? 2:19 /lib/svc/bin/svc.startd S global root 9 1 0 70 20 11400 13040 ? 1月 29 ? 2:01 /lib/svc/bin/svc.configd S global root 2852 1 0 40 20 2960 7536 ? 1月 29 ? 0:00 zoneadmd -z zone1 S zone1 root 2876 1 0 0 SY 0 0 ? 1月 29 ? 0:00 zsched S zone1 root 2906 2876 0 40 20 448 2920 ? 1月 29 ? 0:10 /sbin/init -m verbose S zone1 root 2934 1 0 43 20 600 15296 ? 1月 29 ? 2:22 /lib/svc/bin/svc.startd S zone1 root 2938 1 0 98 20 1848 11656 ? 1月 29 ? 2:01 /lib/svc/bin/svc.configd S zone1 daemon 3097 1 0 40 20 2048 5856 ? 1月 29 ? 0:05 /usr/lib/crypto/kcfd
のような感じだった。
globalzoneのinitがzone1のzschedを立ち上げる。
そして、zone1のzschedがinitを立ち上げる。
と言う流れ。
うーん、SPARCマシンで久しぶりに遊んでみようかな...