リソース不足について - 第 3 回

こんにちは。

Windows テクノロジー サポートの丸山です。

 

第 1 回、および第 2 回では、リソース不足の問い合わせにおいて、原因となることが多いページプール、非ページプールの不足についてお話をさせていただきました。

 

今回は、ページプール、非ページプールの上限値の確認方法と、Windows Vista や 64-bit Windows についてお話します。

ページプール、非ページプールの上限値確認方法について

 

まず、パフォーマンスモニタでは、以下の値が確認可能であることをお話ししました。

 

- Pool Nonpaged bytes

- Pool paged bytes (この値は、ページアウトされた分も含めた、ページプールの全体サイズを示しています)

- Pool paged resident bytes (この値は、ページプールの中でも、物理メモリ上にあるメモリサイズを示しています)

 

しかしながら、パフォーマンスモニタでは、これらの最大サイズを確認することができません。

カーネルデバッガを使用して、!vm コマンドを実行することで、値を確認することができます。

ただし、Windows Vista 以降の OS をお使いの場合では、デバッガを接続するためにWindows をデバッグモードで起動する必要があります。ちょっと面倒ですね。

そこで、代わりに今回は Process Explorer ツールを使用した方法についてご紹介します。

Process Explorer では、シンボルの設定を行うことで、現在確保されているプールのサイズや、その上限値を確認することができます。

 

まず最初に、最新の Debugging Tools for Windows をインストールする必要があります。起動はしなくて結構です。

 

デバッガをインストールしたら、Process Explorer を起動します。

 

そして、Symbol Configuration のダイアログを開きます。

Dbghelp.dll path: には、先程インストールしたデバッガの dbghelp.dll を、

Symbols path: には、マイクロソフト シンボル サーバーのパスを設定してください。

Process Explorer

一般的な設定は、次のような値になります。

 

Dbghelp.dll path: C:\Program Files\Debugging Tools for Windows\dbghelp.dll

Symbols path: SRV*c:\websymbols*https://msdl.microsoft.com/download/symbols

 

Symbol は上記のように指定する事で、ローカルの c:\websymbols に必要なシンボルがダウンロードされます。

ダンプファイルの解析やデバッグでも使えますので、メモリダンプを解析するで紹介されているパスと同じ場所を指定する事をお勧めします。

 

シンボルの設定が終わったら、System Information ダイアログを開きます。

View のメニューから選択するか、Ctrl+I キーを押下してください。

Kernel Memory の項目を見てください。設定が正しければ、ここにページプール、非ページプールの現在値、上限値が表示されています。

 

2GB 32-bit Windows XP

2GB 32-bit Windows XP

Windows Vista 以降の 32-bit Windows

 

次の例を見てください。

 

2GB 32-bit Windows Server 2008

2GB 32-bit Windows Server 2008

 

Windows Vista 以降 (Windows Server 2008 や、Windows 7 も含む) の 32-bit Windows におけるメモリ マネージャでは、システムリソースの割り当てに関する懸念がなくなりました。※Windows Server 2008 R2 には、32-bit バージョンはありません。

Windows Vista 以降の OS では、起動時にメモリ割り当て範囲が決定する静的なメモリ割り当て機構の代わりに、要求に応じて空きメモリの種類を変更できるよう、動的なメモリ割り当て機構が実装されました。

このため、これまでの Windows に比べて非ページプール、ページプールの上限値がずっと緩和されています。

 

しかしながら、やはり非ページプールの上限値は物理メモリの搭載量に左右されてしまいます。

このため、非ページプールの上限値は、物理メモリ搭載量の 75% 程度となります。ただし、最大で 2GBが上限となります。

ページプールの上限値は、システムに設定されている合計仮想メモリの値となります。ただし、最大で 2GBが上限となります。

最大値が2GBであるというのは、32-bit の Windows では、カーネルのメモリ空間が 2GB に制限されていることによります。

もちろん、2GBのカーネル空間にはほかの用途で使われるメモリもありますので、実際には2GBすべてが割り当て可能となるわけではありません。

 

64-bit Windows

 

64-bit Windows では、2GB を超えるメモリが認識されている場合にはより大きなサイズのメモリが使用できます。

 

2GB 64-bit Windows XP

2GB 64-bit Windows XP

 

64-bit バージョンの Windows XP や Windows Server 2003 では、ずっと大きなサイズのページプール、非ページプールが使用できます。

 

非ページプールの上限値は、物理メモリ搭載量の 40% 程度となります。ただし、最大で128GB が上限となります。

ページプールの上限値は、非ページプールの上限値の 4 倍となります、ただし、最大で128GBが上限となります。

スクリーンショット上でも、ページプールの上限値が、非ページプールの上限値のほぼ4倍となっている様子が確認できますね。

 

8GB 64-bit Windows 7

8GB 64-bit Windows 7

 

64-bit バージョンの Windows Vista 以降では、32-bit バージョンに比べて大容量メモリでのページプール、非ページプール上限値が増えています。

 

非ページプールの上限値は、物理メモリ搭載量の 75% 程度となります。ただし、最大で128GBが上限となります。

ページプールの上限値は、システムに設定されている合計仮想メモリの値となります。ただし、最大で128GBが上限となります。

 

それぞれまとめると、以下のようになります。

 

非ページプール上限値

 

32-bit

64-bit

Windows XP

Windows Server 2003

最大256MB

物理メモリ搭載量の40% 程度

※ただし最大128GB

Windows Vista

Windows Server 2008

Windows 7

Windows Server 2008 R2

物理メモリ搭載量の75% 程度

※ただし最大 2GB

物理メモリ搭載量の75% 程度

※ただし最大 128GB

※Windows Server 2008 R2 は 64-bit バージョンのみとなります。

 

ページプール上限値

 

32-bit

64-bit

Windows XP

Windows Server 2003

Windows XP : 最大491MBWindows Server 2003 :最大 650MB

非ページプール上限値の 4 倍

※ただし最大128GB

Windows Vista

Windows Server 2008

Windows 7

Windows Server 2008 R2

合計仮想メモリの値まで

※ただし最大2GB

合計仮想メモリの値まで

※ただし最大128GB

※Windows Server 2008 R2 は 64-bit バージョンのみとなります。

 

さて、3 回にわたってお送りしたリソース不足シリーズも今回で終了となります。

えっ、もう終わりかって?

だってほら、3 部作ってなんとなく素敵じゃないですか。。。

 

計画があるともないとも噂されている、新シリーズにご期待ください。

 

 

~ おわり ~

 

- リソース不足について - 第 1 回

- リソース不足について - 第 2 回

- リソース不足について - 第 3 回 (今回)