「Vmacore::SystemException」タグアーカイブ

ESXiでvim-cmdが使えない

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も確保しているのにまだ足りんのか!と思って設定を見直すと、

mem3

リソースプールの設定中、Reservationのところでメモリ全部割り当てているのに気がつきました。全体のリソースアロケーションだとこんな状態でした。

mem0

Available Capacityが0MBの状態です。ひょっとしてこれ?

 

まさかのメモリー不足

試しにリソースプールのReservationを細かく変えてみるとここが数MBくらいAvailableになるとvim-cmdが動くようになります。Shellにログインしっぱなしでここの設定を変えてコマンド打つと動くようになったりエラーになったりとリアルタイムで変わります。つまり、ESXiのShellはたとえrootとは言えどもユーザー側のリソースを食うってことなんですね。

mem2

ということで、Reservationは本当に必要最小限の設定にしておくのが良さそうです。上図のような感じでWindows系には2GBとFreeBSD系には1GBと設定し直してみました。

mem1

全体のリソースアロケーションはこういう状態になりました。16GBの実メモリの内ESXiの取り分が3GBでユーザーの取り分が13GB。リザーブが3GBで残りの10GBは必要な人が取り合うという状態になりました。どうせユーザーはほぼ一人なのでReservedはゼロ設定にしてても実害は無いんでしょうけど。それにしても、お馬鹿な設定をしたことでいい勉強になりました。