本記事はマイクロソフト社員によって公開されております。
いつも弊社製品をご利用いただきまして誠にありがとうございます。
Windows Commercial Support の相沢です。
今回は動的メモリが有効に設定されている仮想マシンにおいて、Memory manager の不具合に起因して Resident Available と呼ばれるメモリ領域が枯渇し、物理メモリには余裕があるにもかかわらずシステムの動作が不安定になる問題についてご案内いたします。
対象 Guest OS
- Windows Server 2019
- Windows 10 LTSC 2019
概要
仮想化環境では、仮想マシンのメモリ使用状況に応じてメモリの割り当てを動的に増減させる機能として “動的メモリ” が用意されています。本機能を利用することにより、仮想基盤のメモリリソースを柔軟に管理することができます。
しかしながら、一部の Windows OS (対象 Guest OS 欄を参照) を動的メモリが有効な仮想マシンで稼働させている場合、OS カーネルの不具合により、Resident Available Memory (※) と呼ばれる領域の使用量がリークする問題がございます。仮想マシンの割り当てメモリの変動具合によってリーク量は異なりますが、割り当てメモリが数十 GB 拡張されると Resident Available Memory の使用量が数十 MB 程度リークいたします。
※ Resident Available Memory は、物理メモリに常駐する必要がある全てのデータが物理メモリを占有した場合(全てのカーネルスレッドスタックがスワップインされ、全てのプロセスの最小ワーキングセットの合計が物理メモリを使用している状態)の空きページの数を示す値です。
したがいまして、仮想マシンの割り当てメモリの拡張/縮小が頻繁に発生する環境では、徐々に Resident Available Memory の値が減少していきます。最終的に Resident Available Memory が枯渇した場合には、タスクマネージャー等で確認可能な物理メモリの空き領域(Available Memory) が十分な場合でも、システム上でリソース枯渇のエラーが発生いたします。これに起因して、以下のような事象が表面化する場合があります。
- 新規プロセス起動不能
- アプリケーションにてリソース不足のエラーが発生
- RDP 接続不能(RDP クライアント側で「内部エラーが発生」のメッセージが表示されることが報告されています)
- 画面が真っ暗になり操作不能
- 仮想マシンの Heartbeat service が停止
動的メモリが有効な仮想マシンにおいて、物理メモリの空き領域には余裕があるにもかかわらず上記事象が発生した場合には、後述の回避策についてご検討ください。
原因
本不具合は Windows OS のコンポーネント (Memory Manager) の不具合に起因して発生いたします。
回避策
本不具合につきましては、本ブログ執筆時点では修正が行われる予定はございません。
恐れ入りますが、本事象に遭遇した場合には以下の対処をご検討いただきますようお願い申し上げます。
・定期的に仮想マシンを再起動する
・仮想マシンのメモリ割り当ての種類を動的メモリから固定メモリに変更する
参考
Resident Available Memory はタスクマネージャーやパフォーマンス カウンター等の OS 標準のシステム管理ツールでは確認することができません。本事象に合致するかを確認するためには、事象再現時にメモリ ダンプを取得して解析を行う必要がございます。ご参考までに、以下はデバッガー(Windbg.exe)を使用して事象発生時のメモリ ダンプを解析した際の例となります。
1 | 0:00 kd> !vm |
変更履歴
- 2022/08/05 : 本 Blog の公開