Windows Server のメモリダンプはデフォルトだと「自動メモリダンプ」になっています。後述しますが、メモリサイズが 32GB 以下のサーバであれば「アクティブメモリダンプ」、それよりメモリが大きければ「自動メモリダンプ」を推奨します。
Contents
メモリダンプの種類について
メモリダンプには Windows Server 2019 時点で以下の5つの種類が存在します。
最小メモリダンプ (256KB) | 出力サイズが256KB固定であり、実際のメモリの内容が出力されない為、利用されることはほとんどない。 |
カーネルメモリダンプ | カーネルメモリだけを出力する。アプリケーションが使用していたメモリ領域などは含まない。32bit OS の最大値は2GB+16MB、64bit OS の最大値はメモリサイズ+128MB。ダンプサイズはカーネルの利用状況に依存する。 |
完全メモリダンプ | メモリを丸々ダンプとして出力する。 |
自動メモリダンプ | Windows Server 2012 以降の新機能。詳細は後述。 |
アクティブメモリダンプ | Windows Server 2016 以降の新機能。OS が使用中のメモリ領域のみが記録される。結果として完全メモリダンプより無駄が無くなりダンプファイルが小さくなる。 |
Windows Server の構築では、これらのメモリダンプの出力方法から最適なものを選択する必要があります。よくある推奨設定は「完全メモリダンプ」もしくは「カーネルメモリダンプ」ですが、本サイトでは「アクティブメモリダンプ」もしくは「自動メモリダンプ」を推奨しています。その理由についてご紹介いたします。
仮想メモリとの関係
ダンプを設定するにあたり仮想メモリの設定も重要です。ダンプファイルの一時保存領域にページングファイルが利用されるからです。
64 ビット版の Windows と Windows Server は、32 ビット版よりも多くの物理メモリ (RAM) をサポートしています。 しかし、ページ ファイルのサイズを設定する理由は、どちらも同じです。 つまり、必要に応じてシステム クラッシュ ダンプを格納しなければならないため、または必要に応じてシステムのコミット メモリの制限を拡張しなければならないためです。 たとえば、大量の物理メモリが備わっている場合は、システムのピーク使用時のコミット チャージをページ ファイルで補う必要がないことも考えられます。 つまり、物理メモリだけで、コミット チャージに相当する容量を確保できるわけです。 しかし、この場合でも、システムのクラッシュ ダンプを保持するために、ページ ファイル、または専用ダンプ ファイルを必要とします。
完全メモリ ダンプ採取のための設定手順について | Microsoft Docs
ダンプの方法によってダンプファイルのサイズは異なる為、「ダンプを保存するための仮想メモリ」として考えた場合、仮想メモリは下表のサイズ以上に設定します。
メモリダンプの設定 | ページングファイルの最小要件 |
---|---|
最小メモリダンプ (256KB) | 1MB |
カーネルメモリダンプ | OS稼働時のメモリ空間に依存 |
完全メモリダンプ | RAM + 257MB |
自動メモリダンプ | OS稼働時のメモリ空間に依存 |
アクティブメモリダンプ | OS稼働時のメモリ空間に依存(ただし完全メモリダンプより大きくなることはない) |
上記リストは「64ビット版の Windows の適切なページ ファイル サイズを決定する方法 | Microsoft Docs」より引用したものですが、IBM や Fujitsu は完全メモリダンプ用の最小ページングファイルは RAM+257MB ではなく RAM+300MB 程度用意するように紹介しています。市販の技術書にも RAM+300MB と記載されているので、完全メモリダンプを利用する時のページングファイルは最低 RAM+300MB とした方がよいでしょう。
ページングファイルは OS が格納されていない高速なドライブに格納した方がよいです。また、複数のページングファイルを複数の物理ディスクに分けるとパフォーマンスが向上します。ただし、単一ディスクのパーティションにページングファイルを散りばめるのは NG ですので注意してください。
ページ ファイルを管理する必要がある場合、複数の物理ディスクがあるときには、Windows システム ファイルが格納されていない高速なドライブにページ ファイルを移動することをお勧めします。また、ディスク コントローラーでは、同時にデータを読み書きする複数の要求を処理できるので、複数のページ ファイルを 2 つか 3 つの物理ディスクに分けると、パフォーマンスがさらに向上します。ただし、単一の物理ディスクにある複数のボリュームを使用して、複数のページ ファイルを作成しないように注意してください。たとえば、ボリューム C、D、および E を含む単一のハード ディスクを使用している場合、このうち 2 つ以上のボリュームにページ ファイルを分割すると、コンピューターのパフォーマンスが低下することがあります。
ヒント: 仮想メモリ構成を最適化するベスト プラクティス | Microsoft Docs
「CドライブではなくDドライブに置く!」ぐらいの感覚で記憶しておくとよいと思います。
自動メモリダンプについて
冒頭で「メモリが32GBより大きければ自動メモリダンプを推奨」と述べました。デフォルト設定でもある自動メモリダンプについて掘り下げていきます。
実は自動メモリダンプで出力するダンプ内容はカーネルメモリダンプと同様です。勿論、違いはあります。まずはその違いについてご紹介します。
自動メモリダンプとカーネルメモリダンプの違い
自動メモリダンプとカーネルメモリダンプの違いは、ページングファイルのサイズを動的に操作するかどうかです。
自動メモリダンプは仮想メモリのページングファイル自動割り当て機能と連携し、もしページングファイルのサイズが足りずにダンプの出力に失敗した場合、次回起動時にページングファイルを自動で拡張します。
自動メモリダンプはページングファイルの自動管理機能と連携した機能でした。ではページングファイルのサイズは固定するとどうなるのでしょうか。
自動メモリダンプは、必要に応じてページングファイルのサイズを変更します。しかし、ページングファイルをカスタムサイズで指定している場合、ページングファイルのサイズの変更ができません。そのため、メモリの使用状況によっては、障害発生時にダンプファイルが正しく出力されないことがあります。自動メモリダンプを使用する際はページングファイルの設定を以下のどちらかに設定して下さい。
・ 「すべてのドライブのページング ファイルのサイズを自動的に管理する」
・ 「各ドライブのページングファイルのサイズ」-「システム管理サイズ」
Windows Server 2008/2008R2/2012/201 R2/2016/2019 大容量メモリダンプファイル 設計ガイド | Fujitsu
上記 Fujitsu のドキュメントのように、当然上手くいきません。
勿論、仮想メモリのページングファイル自動割り当て機能は自動メモリダンプの為だけにあるわけではありません。ページングファイルをシステム管理にしておくと、メモリ不足時にページングファイルを動的に拡張してくれるので、純粋なメモリ不足にも柔軟に対応してくれます。自動メモリダンプはその仕組みに相乗りしているようなイメージです。
まとめると、ページングファイルを固定サイズで確保しておき、確実にカーネルダンプを取得する「カーネルメモリダンプ」、ページングファイルを動的に拡張し、初回のダンプに失敗する可能性を許容したたうえでディスク容量を節約しつつダンプを取得する「自動メモリダンプ」ということになります。
カーネルメモリダンプでは駄目なのか
結果的に似たようなダンプファイルが出力されるのであれば、最初からカーネルメモリダンプに設定するのも一つの手です。実際、NECのインストレーションガイドではカーネルメモリダンプを推奨しています。
ただ、カーネルメモリダンプにするということはページングファイルは最大値である RAM+128MB 以上を設定しなければなりません。結局メモリ分を丸々ページングファイルとして確保するのであれば、カーネルメモリダンプではなくアクティブメモリダンプや完全メモリダンプを選択した方がよいでしょう。
ちなみに、NECのインストレーションガイドだとページングファイルは最低がメモリ+400MB以上、推奨はメモリ×1.5以上です。NEC は昔から仮想メモリは物理メモリ×1.5以上推奨です。なおさらアクティブメモリダンプか完全メモリダンプでいいと思います。
アクティブメモリダンプについて
自動メモリダンプはメリットが多いものの、初回のダンプ出力に失敗する可能性があるというのは考え物です。メモリサイズが極端に大きくなく(本記事では32GB以下と定義しました)、ディスク容量に余裕があるのであれば、先述したようにアクティブメモリダンプを設定すべきです。
アクティブメモリダンプが登場していない Windows Server 2012R2 以前では、ダンプ設定は完全メモリダンプにすることが多かったです。というのも、Microsoft Docs に完全メモリダンプが推奨されている記事がありますし、アプリケーション側のメーカーサポートで完全メモリダンプが求められることもあったからです。
カーネルメモリダンプに関しては、カーネルメモリのみを記録し、ユーザー モードの情報はないため、トラブルの原因を特定できない場合があります。最小メモリダンプ (256 KB) に関しては、停止した原因を判別するのに役立つ有用な情報の最小セットを記録するため、原因追及に至る可能性は低いです。
一方、完全メモリダンプはシステムメモリのすべての内容を記録するため、詳細調査に非常に有効です。従いまして、調査の為にメモリダンプを取得する場合には、完全メモリダンプを取得いただく事を推奨しています。
完全メモリ ダンプ採取のための設定手順について | Microsoft Docs
ただし、完全メモリダンプは物理メモリが丸々出力されるので、ダンプファイルの出力にも受け渡しに苦労します。アクティブメモリダンプは完全メモリダンプより確実にダンプサイズが小さくなるので、完全メモリダンプを利用するケースは今後少なくなってくるかと思います。
アクティブメモリダンプは「採取対象であるOSが使用しているメモリ領域のみが記録される」という特性により、Hyper-V ホストに設定するとゲストOSが利用しているメモリ領域を除いたダンプファイルを出力することが可能になるというメリットもあります。
アクティブメモリダンプについては Fujitsu のドキュメントが参考になるので一度目を通すことをお勧めします。
ダンプファイルの設定についてのまとめ
まとめると、以下のように設定するとよいかと思います。
メモリが32GB以下の場合 | メモリが32GBより大きい場合 |
---|---|
アクティブメモリダンプ | 自動メモリダンプ |
RAM + 300MB | システム管理 |
勿論ダンプの設定はサーバの重要度とリソースを考慮したうえで決定するものなので、上表はあくまで参考程度としてください。
ただ、アプリケーションベンダへの問い合わせを考えるとカーネルメモリダンプでは不十分に思えますし、完全メモリダンプではダンプファイルの受け渡しに苦労するので、個人的な一番のお勧めはアクティブメモリダンプです。