Xenで仮想サーバをたくさんたててWebサーバやらストレージサーバやらにしているML115に、開発用の仮想サーバを追加して起動したら、全ての仮想サーバにネットワーク通信ができなくなった。Domain-0のコンソールには以下のようなエラーメッセージが繰り返し出続けている。
printk: 4 messages suppressed. xen_net: Memory squeeze in netback driver.
新しく立ち上げた仮想サーバをshutdownすると正常に戻る。別の仮想サーバをひとつ落とした上で新しい仮想サーバを立ち上げると大丈夫。どうも何かのリソース問題にぶつかったようだ。
以前ほとんど同じような現象に遭遇したときは、loopbackデバイスの不足だった。その時は/etc/modprobe.confにoptions loop max_loop=16と書いて解決したが、今回は16台も起動していないので別の問題のようだ。ちなみに/etc/xen/にあるDomain-Uの設定ファイルで仮想ディスクをfile:として設定すると loopbackデバイスを消費するが、tap:aio:で設定すると消費しないらしい。
いろいろ調べてみると、Domain-0のメモリをあらかじめ起動にカーネルパラメータで指定しておくとこの問題は回避できるらしい。/boot/grub/grub.confのkernel行に以下のようにdom0_mem=○○Mと追記する。
title CentOS (2.6.18-92.1.6.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-92.1.6.el5 dom0_mem=768M
module /vmlinuz-2.6.18-92.1.6.el5xen ro root=/dev/VolGroup00/LogVol00
module /initrd-2.6.18-92.1.6.el5xen.img
いままで特にメモリ指定はしていなかったので、Domain-0は最初はがっぽりとメモリを割り当てられていて、Domain-Uを立ち上げるたびにメモリが減っていった。これはこれで便利だなと思っていたが、そのあたりにバグがあったのかもしれない。似たような現象がXen3.2にあげたら直ったというような情報もあったが、当方では未確認。