仮想マシン
 Computer >> コンピューター >  >> ソフトウェア >> 仮想マシン

ゲストOSでメモリのオーバーコミットを検出する方法

VMware ESXiやHyper-Vなどの仮想化ホスト上で稼働する仮想マシン(VM)を管理し、パフォーマンス問題を調査していると、ゲストOSが認識している(または割り当てられた)メモリ量よりも、実際に利用可能なメモリが大幅に少ないという状況によく遭遇します。例えば、仮想マシンに8GBのメモリを割り当てているのに、タスクマネージャーでは1GBの空きがあると表示される一方で、実行中の全プロセスのメモリ消費量を合計しても3GBに満たない——残りの4GBはどこへ行ったのでしょうか?

メモリオーバーコミットとは

このような現象は、通常、ハイパーバイザーの「メモリオーバーコミット」機能が原因です。

メモリオーバーコミットとは、物理ホストが実際に搭載しているメモリ量を超えて仮想マシンにメモリを割り当てることを可能にするハイパーバイザーの機能です。ただし、要求されたメモリが特定の時点で必ず確保できるという保証はありません。現在のホスト負荷に応じてVM間でメモリが動的に再配分されるため(アイドル状態のVMのリソースを負荷の高いVMに回すなど)、仮想マシンをより高密度に運用できます。

VMwareにおけるメモリオーバーコミットの実装メカニズムの一つがメモリバルーニング(Memory Ballooning)です。Hyper-Vでは、同じ機能がダイナミックメモリ(Dynamic Memory)として実装されています。

補足: VMwareとMicrosoftの両社とも、メモリ圧縮技術を幅広く活用してメモリリソースを節約しています(これもメモリオーバーコミット技術の実装形態の一つです)。

バルーンドライバの仕組み

VMware ESXiでは、メモリオーバーコミット(仮想メモリバルーニング)は、VMware Toolsに含まれるvmmemctl.sysドライバーによって実装されます。このドライバーは、必要に応じて風船を膨らませるようにダミープロセスを作成して物理メモリを確保します。その結果、確保されたメモリはゲストOS内の他のアプリケーションから使用できなくなり、ハイパーバイザーはその分の空きメモリを他のVMに配分できます。一方、Hyper-Vのダイナミックメモリでは、統合サービスのDynamic Memory VSCコンポーネントであるdmvsc.sysドライバーが使用されます。メモリオーバーコミットの設定は、ハイパーバイザー管理者が管理します。

ゲストOS内部からの検出手順

それでは、ゲストVMの中から「ゲストOSが認識している物理メモリよりも、実際に利用可能なメモリが少ない」ことを検出するにはどうすればよいのでしょうか?

ここでは、ゲストWindows OSにバルーンドライバーが存在するかどうか、またそのサイズを確認する方法を、具体例とともに見ていきましょう。

ゲストとしてWindows Server 2012 R2が稼働するVMに8GBのメモリが割り当てられています。タスクマネージャーでは、メモリの93%(7.4GB)が使用中と表示されています。しかし、実行中の全プロセスのメモリ使用量を合計すると、実際に使用されているのはわずか2.5GBであるという意外な結果になります。残りの5GBはどこにあるのか?タスクマネージャーでもリソースモニターでも、この問いには答えられません。

ゲストOSでメモリのオーバーコミットを検出する方法

メモリの実態を把握するには、Mark Russinovich氏作成のRamMapツールを使用します(以前の記事では、このツールを使ってWindows Serverでメタファイルによるメモリ使用量増大の問題を診断する方法を紹介しました)。Microsoftのサイトからツールをダウンロードし、管理者権限で実行してください。[Use Counts]タブを確認すると、メモリの大部分(5.4GB)がDriver Lockedオブジェクトによって占有されていることがわかります。

ゲストOSでメモリのオーバーコミットを検出する方法

これは、ハイパーバイザーがゲストOS内のバルーンドライバー経由で確保し、他の仮想マシンに配分したメモリです。つまり、ハイパーバイザーホストのメモリが不足しているか、あるいはハイパーバイザー管理者がこのVMに対してメモリ制限ポリシーを適用していることを意味します。

Hyper-Vでの確認方法

Hyper-Vでは、パフォーマンスモニターの以下のパフォーマンスカウンターで、VMの現在のメモリ統計を確認できます。

  • Hyper-V Dynamic Memory → Guest Visible Memory
  • Hyper-V Dynamic Memory → Physical Memory

対策:メモリオーバーコミットを無効化する

この動作を無効化したい場合は、ハイパーバイザー管理者がVMのHyper-V設定で[Enable Dynamic Memory](ダイナミックメモリを有効にする)オプションをオフにするか、最小メモリ予約値を引き上げる必要があります。

ゲストOSでメモリのオーバーコミットを検出する方法

VMware ESXiホストを使用している場合は、[Resource Settings](リソース設定)でこの仮想マシンに割り当てるメモリ予約量を増やすか、[Reserve all guest memory (All locked)](すべてのゲストメモリを予約・ロック)を選択して全メモリを予約します。

ゲストOSでメモリのオーバーコミットを検出する方法
  1. 物理メモリダンプエラーの原因と対処法|ブルースクリーンを解決する3つのステップ

    物理メモリダンプエラーは、「ブルースクリーン・オブ・デス(BSOD)」と呼ばれるエラーの中でも最も頻繁に発生するものの一つです。このエラーが発生すると、Windowsはすべての動作を停止せざるを得なくなり、青い画面上に問題の詳細と原因が表示されます。物理メモリダンプエラーの原因は多岐にわたりますが、本記事ではその具体的な解決方法をステップごとにわかりやすく解説します。 物理メモリダンプエラーは、主に2つの要因によって引き起こされます。エラー自体は、システムの整合性を守るために、ハードディスク上のフォルダへデータを「ダンプ」する必要がある状態を指します。この問題の厄介な点は、一見ランダムに発生

  2. 物理メモリダンプエラー(ブルースクリーン)を解決する方法|初心者でもできる3つの対処ステップ

    物理メモリダンプエラーは、いわゆる「ブルースクリーンオブデス(BSOD)」の中でも最も頻繁に発生するエラーの一つです。このエラーが発生すると、Windowsはすべての動作を停止せざるを得なくなり、青い画面を表示して問題の内容と原因を知らせてきます。物理メモリダンプエラーの原因はさまざまですが、本記事ではその具体的な解決方法をステップごとにわかりやすく解説します。 物理メモリダンプエラーとは? 物理メモリダンプエラーは、主に2つの原因によって引き起こされ、シンプルな手順を踏むことで解決できます。このエラーが発生すると、システムはハードディスク上のフォルダへメモリの内容を「ダンプ」(退避)し、シ