web-dev-qa-db-ja.com

Windowsが常にRAMインストールされているのと同じ量の仮想メモリを使用するのはなぜですか?

そして、なぜそれはその量の最大2倍にしたいのですか?私のシステムには32GBのRAMがあり、Windowsはデフォルトで最低16MBの仮想メモリを設定し、32GB(!)を割り当て、50GB(!!)を推奨します。64GBでさらに悪いRAM 100GB以上を割り当てることを推奨したシステムですが、RAMで利用可能なのと同じ量(この場合は64GB)を再び「のみ」使用しました。

私が理解している限り、ページファイルの概念は、Windowsが必要な場合にのみ展開し、最小量から開始するというものですが、決して拡大することはありませんが、常に絶対最大値になります。ページファイルを無効にするか、インストールされているRAM)と同じ量に設定しないと、7Zipなどの大量のメモリを使用する一部のプログラムで問題が発生し、十分ではないと主張するため、これは非常に厄介です。使用可能な空きメモリが十分にある場合でも、割り当てるメモリ。

この動作により、ドライブ(SSD)の寿命が大幅に短くなる可能性があります。 Windowsがこれを行う理由と、これを防ぐ方法、または一部のプログラムで奇妙な動作を起こさずにページファイルを完全に無効にする方法を教えてください。

4
PTS

まず、ページファイルのサイズを設定するWindowsのダイアログがページファイルを「仮想メモリ」と同一視するのは(あなたのではなく)大きな間違いです。ページファイルは、プライベートコミットメモリによって使用される仮想アドレス空間の1つのカテゴリのバッキングストアにすぎません。他のファイル(マップされたファイル)に裏打ちされた仮想アドレス空間があり、v.a.sがあります。これは常にページングできないため、常にRAMに留まります。しかし、少なくとも、仮想アドレスからRAMアドレスへの変換は常に機能しているという点で、すべて「仮想メモリ」です。

あなたの観察は正しいです:Windowsのページファイルサイズの割り当ては、デフォルト= RAMサイズと最大= 2倍の単純な計算を使用します。 (以前は1.5倍と3倍でした。)彼らはそれを何かに設定する必要があり、これらの要因はほとんど常に十分な結果を提供します。また、システムがクラッシュした場合にメモリダンプをキャッチするのに十分なページファイルスペースが保証されます(カーネルまたはフルダンプを有効にしている場合)。

私が理解している限り、ページファイルの概念は、Windowsが必要な場合にのみ展開し、最小量から開始するというものですが、決して拡大することはありませんが、常に絶対最大値になります。

ああ...それは「初期サイズ」から始まります。これは「最小許容」ではありません。これが、Windowsが初期サイズに使用するため、RAMサイズで表示される理由です。

しかし...実際のページファイルサイズが最大設定になっているのを見ていると言っていますか?例えば初期16GB、最大32 GBに設定されている場合、32 GBで実際のサイズ(「現在割り当てられている」)が表示されていますか?ところで、再起動すると常に初期サイズに戻るはずです。

「システムの仮想メモリが不足しています」というポップアップが表示されますか? 'OSがページファイルを現在のサイズを超えて拡張する場合は、そうする必要があります。

OSは、何かが実際に大量のプライベートコミットメモリを割り当てようとして、内容を格納するために拡大されたページファイルスペースが必要にならない限り、ページファイルを拡大しません。しかし、多分何かがあります。タスクマネージャの[プロセス]タブを見てください。 「コミットサイズ」列には、プロセスごとにこれが表示されます。列見出しをクリックして、豚が誰であるかを確認します。 :)

ページファイルを無効にするか、インストールされているRAMの同量に設定しないと、7Zipなどの大量のメモリを使用する一部のプログラムで問題が発生し、割り当てるのに十分なメモリがないと主張するため、これは非常に厄介です。使用可能な空きメモリが十分にある場合でも。

これは、利用可能なRAMとは関係ありませんが、「コミット料金」と「コミット制限」と呼ばれるものと関係があります。 「コミット制限」は、(RAM-ページング不可能な仮想メモリ)+現在のページファイルサイズの合計です。 (RAMを解放するのではなく、RAMだけです。)したがって、たとえば8 GB RAMと16GBの現在のページファイルを持つシステムには約24GBのコミット制限があります(RAMのため、「約」ページングできないコンテンツを保持しているものは、コミット制限にカウントされません)。

「コミット料金」は、システムに現在存在するプライベートアドレススペースの量です。これはコミット制限未満である必要があります。そうでない場合、システムはスタッフが存在する場所があることを保証できません。

タスクマネージャの[パフォーマンス]タブには、「コミット(GB)」という凡例が付いたこれら2つの数値が表示されます。例えば「Commit(GB)1/15」と表示されているマシンを見ています。これは、15GBの制限のうち1GBの現在のコミット料金です。

7Zipのようなプログラムが実行しようとした場合。サイズ>(commitLimit --commitCharge)のVirtualAlloc、つまり「残りの」コミット制限よりも大きい場合、OSがページファイルを拡張してコミット制限を十分に大きくできない場合、割り当て要求は失敗します。それはあなたが起こっているのを見ていることです。 (Windowsには、実際には「物理メモリが不足しています」というエラーメッセージは表示されず、ユーザーモードアクセスでは表示されません。仮想のみです。)

すべてのRAM(ページングできない小さなビットを除く)は、現在空きであるかどうかに関係なく、コミット制限にカウントされるため、free RAMとは何の関係もありません。

これらの割り当ての失敗のいずれかが発生した後にシステムを見ると、明らかに問題はありません。システムを見ると、コミット料金が制限をはるかに下回っており、RAMの空き容量が多い場合もあります。問題が何であるかを確認するには、プログラムが割り当てようとしていたプライベートコミットメモリの量を知る必要があります。そして、ほとんどのプログラムはあなたに教えてくれません。

7Zipがv.a.s.の割り当てに積極的すぎるように思えますが、おそらくRAMサイズに基づいてリクエストをスケーリングしていますか? 7Zipが満足できる小さなページファイル設定がないことを確認しますか? 32ビットバージョンまたは64ビットバージョンの7-zipを使用していますか? 32ビットバージョンを使用すると、2GBまたは3GBを超える仮想アドレス空間を使用できない可能性があるため、これは修正されます。もちろん、巨大なデータセットではそれほど速くないかもしれません。

この動作により、ドライブ(SSD)の寿命が大幅に短くなる可能性があります。

いや、そうではない。どんなサイズのページファイルをそこに置くだけでも、システムが実際にその量をページファイルに書き込むことを意味するわけではありません。 (「シャットダウン時にページファイルをクリアする」オプションが設定されていない限り、それでもすべてが書き込まれるとは思いません。Mmは使用中のブロックを認識しており、それらのみを書き込む必要があります...私は考えたことがありません。その前に;私はチェックする必要があります。)

ページファイルに実際に含まれているものの量を確認する場合は、PerfMonユーティリティを使用してください。ページファイル用のカウンターグループがあり、もちろん「%usage」カウンターが必要です。このパーセンテージをファイルの実際のサイズごとに解釈します(エクスプローラーに表示されます)。

それは多くのスペースを使用します、そしてSSDのスペースはかなり大切なので、これは私たちのほとんどにとって懸念事項です。 SSDに適切なサイズのページファイル(たとえば4GBまたは8GB)を配置し、回転するRustドライブを接続して、その上に大きなページファイルを配置することをお勧めします。または、SSDだけが必要で、ページファイルに他に何も必要ない場合は、2番目のページファイル用に安価な小さなSSDを購入してください。

5
Jamie Hanrahan