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マシンで久しぶりに遊んでみようかな...