ESXi4.0上に仮想マシンとしてP2VしたRedHat9を動かしています。
H/Wには物理メモリが4GB搭載されていて、仮想マシンのメモリ構成として
3GB(3072MB)のメモリを割り当てています。
仮想マシン上のAP処理時間が旧物理環境に比べて非常に大きくなっており調査をしております。
仮想マシン上でtopの出力結果を確認すると以下のようにメモリが逼迫している状況です。
Mem: 3098592k av, 3072460k used, 26132k free, 0k shrd, 187264k buff
1949352k actv, 0k in_d, 70268k in_c
Swap: 4000616k av, 1436k used, 3999180k free 2346248k cached
単純なメモリ不足なら仕方ないのですが、気になる点があり質問させていただきます。
ESXiについては初心者です。
vSphere Client で仮想マシンのリリース割り当てを見ると以下のようになっています。
-
ホストメモリ
3227MB中、消費が2.27GB
ゲストメモリ
3072MB中、有効が368.00MB
リソース設定
予約 0MB
制限 制限なし
構成済み 3.00GB
シェア 高(327680)
オーバーヘッド予約: 155.00MB
-
ホストメモリとゲストメモリの違いが良く分かっていないのですが、ヘルプを見ると、
ホストメモリの消費とは「仮想マシンに割り当てられた物理メモリの実際の消費」
と書かれています。
また、ゲストメモリの有効とは「最近アクセスしたメモリの容量」と書かれています。
上記を見て混乱しています。
仮想マシン上で見ると3GBを振り切っているように見えますが、実際には仮想マシンに
アサインされている物理メモリは2.27GBで、実際に仮想マシンで使っている物理メモリ量が
368MBということなのでしょうか?
仮想マシンには3GBしっかりと使わせたいのですが、何か設定を誤っているのでしょうか。
お詳しい方、よろしくお願いします。
直接の回答になっていないと思いますが・・・。
ESXでは現時点で使わない領域は開放する考え方があります。
ゲストOSに割り当てたメモリーも考え方としては最大量を決めうちするようなイメージです。
3GBをゲストOSに割当たとの事ですので単純に3GBまでゲストOSは利用可能になり
そのうち・・・現在はxx.xxGB利用している。のこりzz.zzGBは場合によって他の
ゲストOSから利用可能な状態であるイメージです。もちろん、元のゲストOSが実際に
3GB全てを利用する状態になれば、他を押しのけて3GBまで使い切ります。
押しのけられたゲストOSはDISK上にメモリーをスワップして動作を続けます。
ですから3GBを使っていないわけではありません。
> Mem: 3098592k av, 3072460k used, 26132k free
> Swap: 4000616k av, 1436k used, 3999180k free 2346248k cached
Swapが発生しているようなのでおそらくネックはピーク時のメモリー不足が発端
かと思います。頻繁にSWAPにアクセスが入るとAPがディスクにアクセスする妨げになり
ます。 これを回避するのにSWAPの領域を別物理ディスクにパスを変更する方法もある
ようです。根本的にはホストハードウェアにメモリーを増設し、ゲストに割り当てる
ことでしょうか。
私の経験では仮想環境ではDISKアクセスが一番のボトルネックになることが多いです。
-
P2Vマシーンでトラブルになるのは・・・仮想環境用にうまくチューニングできていない事が多いようです。
以下の点は最低限確認する必要があります。
前提としてVMwareToolのインストール
ホストマシーンはVMware認定サーバー若しくは認定部品で構成
vSphereClientのパフォーマンスタブでどの項目がネックになっているのか確認
ホストメモリとはESXで消費していると認識しているメモリ量
ゲストメモリとはゲストOSで消費していると認識しているメモリ量です。
ここでのポイントは
ESXi はboot後にメモリ上にファイルシステムを展開する特性があると聞いています。
その量は2GB程度。
今の環境ですと、仮想マシンを1,5GBくらいにすると、メモリが空き
快適に動くようになると思います。
ゲストOSとして300MB程度消費しているようなので、512MBで構成すれば
ESXのメモリオーバーコミットがはたらき、512MBの仮想マシンが4台以上
動くと思います。
私の8GBメモリのML115G5には、メモリ1GB~2GBの仮想マシンが10台以上
快適に動いています
とりあえず、ご要望の設定ですが、
仮想マシンのリソース設定で「メモリの予約に3GB」を割り当てることで、実現が可能です。
ただし、メモリオーバーヘッドも物理メモリを使用します。
変更後にVMが起動しない場合、現在の物理メモリ量では3GBフルの割り当てはできないので値を多少減らしてみて下さい。
シェアは競合時の比率配分ですので、3GBを常に割り当てるにはシェアに関係なく、予約を使うことになります。
理由はわかりませんが、ESXi 4は最低メモリが3GBに増えていますね。
もしかしたら、その辺でVM用に使えるメモリが以前より減っているのかも?
みなさま、アドバイスありがとうございます。
man33taroさん、kisaragiさんのアドバイスを参考に、現在メモリの予約で2GBを割り当て、
仮想マシンの構成も2GBとして再度APの動作を検証しています。
検証結果が出ましたら報告させていただきます。
追加で気になっていることがあります。
topで見ると現在もメモリが逼迫しております。
Mem: 2064440k av, 2051992k used, 12448k free, 0k shrd, 32860k buff
1635448k actv, 104524k in_d, 45692k in_c
Swap: 4000616k av, 142116k used, 3858500k free 946460k cached
ここで、VMwareではメモリのバルーニングという機能があると思います。
物理メモリ4GBの物理マシンに対し、VMkernel上に仮想マシン1台の構成で、これに予約で
2GBを割り当てていますが、この場合、もし上記topのとおりメモリが逼迫状態で
あると仮定すると、余った物理メモリからバルーニングによって空きのメモリが
追加で割り当てられると思ったのですが、バルーンメモリ量はいつになってもゼロのままです。
ESXi4.0に付属のVMwareToolsをインストールしたのでバルーン・ドライバは
正常に機能するはずだと思うのですが・・・。
仮想マシンが複数存在しないとバルーニング機能は意味をもたない(動かない)のでしょうか?
あるいは、仮想マシン上のtopコマンドの結果がそもそも仮想のものなので、信用しない方が
良いのでしょうか。
以前の書き込みで「ホストメモリに2.27GB消費」とありますので、VMの設定メモリを2GBに下げるとメモリ不足になる可能性が高いです。
パフォーマンスを改善させるのであれば、仮想マシンの割り当てメモリ3GBで、予約も出来る限り3GBに近い割り当てをしてみて下さい。
メモリバルーニングは複数のVMで物理メモリを取り合う状況になった場合に、
・余裕のあるVMから物理メモリを取り
・物理メモリの少ないVMに貸し出す
という機能です。
ですので、仮想マシンがESXiの上に1台しかいない場合、メモリバルーンが発生することはありません。
VMに設定したメモリが2GBであれば、その上限を超えることはありません。
その内、何MBが物理メモリとなり、何MBがSwapファイルとなるかでパフォーマンスに変化が出ます。
予約は「設定したメモリのうち、何MBを物理メモリとして強制的に割り当てるか」という設定ですので、そのあたりのマニュアルをもう一度読み返してみて下さい。
VMwareの入門コースだと、その辺も解説をしてくれます。
詳しく知りたい場合は、受講もお勧めです(高いですが)