ESXiでSSH接続してvim-cmdが使えないという問題が出たので自分用のメモ
vim-cmdでエラーが出た
~ # vim-cmd vmsvc terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted ~ # vim-cmd vmsvc/getallvms terminate called after throwing an instance of 'Vmacore::SystemException' what(): No space left on device Aborted ~ #
こんな感じでエラーが出ました。他のESXi環境では出たことが無かったのですが、色々ぐぐってみてもそのものズバリの情報が見つからず、エラーメッセージ自体からはどうやらメモリー不足らしい。16GBもメモリ実装してあるし、そのうちESXiが3GBも確保しているのにまだ足りんのか!と思って設定を見直すと、
リソースプールの設定中、Reservationのところでメモリ全部割り当てているのに気がつきました。全体のリソースアロケーションだとこんな状態でした。
Available Capacityが0MBの状態です。ひょっとしてこれ?
まさかのメモリー不足
試しにリソースプールのReservationを細かく変えてみるとここが数MBくらいAvailableになるとvim-cmdが動くようになります。Shellにログインしっぱなしでここの設定を変えてコマンド打つと動くようになったりエラーになったりとリアルタイムで変わります。つまり、ESXiのShellはたとえrootとは言えどもユーザー側のリソースを食うってことなんですね。
ということで、Reservationは本当に必要最小限の設定にしておくのが良さそうです。上図のような感じでWindows系には2GBとFreeBSD系には1GBと設定し直してみました。
全体のリソースアロケーションはこういう状態になりました。16GBの実メモリの内ESXiの取り分が3GBでユーザーの取り分が13GB。リザーブが3GBで残りの10GBは必要な人が取り合うという状態になりました。どうせユーザーはほぼ一人なのでReservedはゼロ設定にしてても実害は無いんでしょうけど。それにしても、お馬鹿な設定をしたことでいい勉強になりました。