最近、低コストでメモリも入手できるようになりましたので、あまり仮想メモリのサイズを気にしなくなっては来ましたが、Windowsデフォルト設定の
- すべてのドライブのページングファイルのサイズを自動的に管理する
といった、仮想メモリ(ページングファイル)を自動管理にした場合、最大どれくらいまでページングファイルでディスクを消費してしまうか調べてみました。
環境・前提条件
- Windows Server 2016
- AWS EC2
- メモリサイズ4GB(t2.medium)、8GB(t2.large)、16GB(t2.xlarge)、32GB(t2.2xlarge)
の環境で確認してみました。
メモリを消費するプロセスとしまして(疑似メモリーリーク)、メモリ負荷テストツールtestlimitを利用しました。
スタート時点の、C:\pagefile.sysは上の仮想メモリのが画像情報通り、704MBからのスタートでした。(Windows Server 2019でも同様の704MB)
結論、物理メモリの2倍程度でプロセスがエラーを出力しダウンする
メモリ負荷テストをした結果、上記のように、実メモリの2倍程度でページングファイルが拡張できなくなり、プロセスがダウンしました。
厳密に言いますと、ページングファイルは8.74GBまで出来ました。
物理メモリの2倍+1GB程度はディスクを消費するかと思います。
ちなみに、testlimitを2プロセス同時に実行させても、ページングファイルのサイズは同程度でした。一つ一つのtestlimitプロセスで使えるメモリサイズが小さくなっていました。
Windows Server 2016はOS再起動するとページングファイルのサイズがリセットされ元に戻る(704MB)
ページングファイルは、一度拡張すると小さくならないかと思いきや、
Windows Server 2016では、OSを再起動するとページングファイルのサイズは704MBに戻っていました。
ページングファイルサイズは、ディスクの空き容量を圧迫したとしても、OS再起動すると空き容量は回復しそうです。
※もしかたらAWS環境特有かもしれませんが。
Windows Server 2016で物理メモリサイズが8GBでメモリ負荷テストを実施してみると
物理メモリサイズが8GBの Windows Server 2016で メモリ負荷テストツールを実施してみますと、
上記の結果、16GB程度でプロセスがエラーとなりました。
つまり、エージングファイルサイズは、16GBー8GB=8GB程度
実際、ページングファイルは物理メモリサイズの二倍と思いきや、1倍でした。
通常、64bit Windows OSではユーザーメモリ空間は8TBまで使用できる使用ですが、物理メモリが少ないとそれ以前にダウンしてしまうことはわかりました。
しかし、規則性は不明。
Windows Server 2016はOS再起動するとページングファイルのサイズがリセットされ元に戻る(1.25GB)
OSを再起動しますと、ディスクを圧迫していましたページングファイルがリセットされるのは共通でしたが、
サイズが異なり、1.25GBになっていました。
規則性は不明、、、
Windows Server 2016で物理メモリサイズが16GBでメモリ負荷テストを実施してみると
ページングファイルサイズのスタート時点は、2.37GBでした。
物理メモリサイズが16GBの Windows Server 2016で メモリ負荷テストツールを実施してみますと、
上記の結果、24GB程度でプロセスがエラーとなりました。
つまり、ページングファイルサイズは、24GBー16GB=8GB程度。
最後にWindows Server 2016で物理メモリサイズが32GBでメモリ負荷テストを実施してみると
ページングファイルサイズのスタート時点は、4.75GBでした。
物理メモリサイズが32GBの Windows Server 2016で メモリ負荷テストツールを実施してみますと、
上記の結果、40GB程度でプロセスがエラーとなりました。
つまり、ページングファイルサイズは、40GBー32GB=8GB程度(実際8.70GB)。
規則性は不明ですが、物理メモリサイズの2倍以上にはならなそうです。
そして、ページングファイルのサイズは10GB程度以上にはならなそうです。
Windows Server 2019では物理メモリの3倍ほどのページングファイルサイズまで出来た
同一条件(メモリ4GB)で、Windows Server 2019で試してみたところ、仮想メモリは物理メモリの3倍程度まで膨れました。
そして、物理メモリの三倍程度でプロセスはダウンしました。
つまり、ページングファイルのサイズが10GB以上を越えました。OSのバージョンにより仕組みが変わりそうです。
Windows Server 2019でも同様OS再起動するとページングファイルのサイズがリセットされ元に戻る(704MB)
Windows server 2019でも、Windows server 2016と同様、OSを再起動しますと、ページングファイルのサイズが704MBに戻ていました。
ページングファイルなしでもプロセスのメモリダンプは取得可能
通常、カーネルメモリダンプや、完全メモリダンプといいましたブルースクリーン時のメモリダンプは(クラッシュダンプ)、ページングファイルのサイズがそのメモリダンプの大きさに対応していないと出力されません。
メモリダンプ開始 → メモリをページングファイル(pagefile.sys)にコピー →ページングファイルをメモリダンプファイル(memory.dmp)にリネーム
と言いましたイメージで挙動しています。
なので、「ページファイルファイルなし」ではメモリダンプが酒六出来ないのですが、
「ページングファイルなし」でも(testlimit 1GBでテストした結果)、プロセスのメモリダンプは取得できます。
ただ、完全メモリダンプは仮想メモリが物理メモリより大キックなければならなので、メーカーから完全メモリダンプを求められる会社ならの仮想メモリサイズは自動もしくは物理メモリより大きい必要性があります。
まとめ
以上、物理メモリサイズの3倍をディスクサイズ消費量と見立てて問題が無ければ仮想メモリは自動で良い。
しかし、問題が出始めそうな場合は、完全メモリダンプは取れなくなるが、仮想メモリのサイズをカスタマイズした方が良いと思われます。