web-dev-qa-db-ja.com

Windowsタスクマネージャによって報告される合計メモリ使用量が、すべてのプロセスのメモリ使用量の合計よりはるかに高いのはなぜですか?

タスクマネージャで、私の合計メモリ使用量が6 GBの合計の90%であることを示していますが、250 MBを超えるRAMを使用しているプロセスはなく、実行中のすべてのプロセスのRAM使用量の合計は2 GB未満です。私はもう試した:

  • Windows 8のタスクマネージャの[プロセス]タブの[メモリ]列の数字を見てください。
  • タスクマネージャの[詳細]タブにある[ワーキングセット]、[プライベートワーキングセット]、[共有ワーキングセット]、[コミットサイズ]の各列を確認します。
  • Process Explorerで同様のメモリー関連の列を調べます。
  • Sysinternals RAMMapを実行してみましたが、メモリ不足の危機に瀕していますが、起動時にクラッシュします。問題を解決したら、RAMMapは正常に動作しますが、その時点では遅すぎます。

いずれもごくわずかな量のメモリが使用されていることを示しています。

この質問の変種を尋ねる多くの人々がいて、インターネットのいたるところにさまざまなバージョンのウィンドウがあります。そのうちのいくつかは、しばしばソフトウェアを再インストールすることによって、メモリ不足の問題を解決することに成功しています。 Windowsを最初から再インストールすることもあります。私はこれらすべてが共有している一般的な質問に対する答えを探していますが、他の場所では決して答えられないようです。

  1. どのようにカウントしても、使用されているメモリの合計が、リストされているすべてのプロセスで使用されているメモリよりはるかに多いのはなぜですか?
  2. どのプログラムがメモリを使用しているのか知らずに、メモリが使用されていることをWindowsがどのように「知る」ことができるでしょうか。
  3. どのプロセスがメモリを使い果たしてもリストに表示されない可能性がありますか?
  4. 使用済みメモリについてより多くの情報を提供できるソフトウェアは他にありますか?

私の問題に特有の詳細:Windows 8.1にアップグレードしてから、ログインすると問題が発生します。プログラムを実行するとすぐにメモリ不足になります。 Process Explorerで、iexplore.exeのいくつかのインスタンスが実行されていることに気付きました。ある特定の例では、数MBのRAMしか使用していませんでしたが、何億ものページフォルトが発生しました。気まぐれに、私はその特定のプロセスを殺しました、そして、メモリ使用量はすぐに70%減少しました。

一つの具体的な質問へと導く:

  • 数MBしか使用していなかったと思われる1つのプロセスを数GBまで解放するにはどうすればよいでしょうか。

そして(おそらく難しい)ボーナス質問:

  • Windowsを再インストールするのではなく、コンピュータを再起動するたびにこれを行わないようにするにはどうすればよいですか。
94
Josh

ところで、あなたは「メモリ」という用語を使わないようにすべきです。それは多くの混乱を引き起こします。あなたが物理的なメモリを意味するならば、「物理的なメモリ」または「RAM」と言いなさい。あなたが仮想記憶を意味するなら、そう言いなさい。あなたが裏付け店を意味するならば、そう言いなさい。

どのようにカウントしても、使用されているメモリの合計が、リストされているすべてのプロセスで使用されているメモリよりはるかに多いのはなぜですか?

それは選択肢がない限り、オペレーティングシステムは物理メモリ(RAM)を無駄にしないからです。

どのプログラムがメモリを使用しているのか知らずに、メモリが使用されていることをWindowsがどのように「知る」ことができるでしょうか。

プログラムがそれを使っていないからです。たとえば、終了したばかりのプログラムのコードを含むメモリを考えてみましょう。使用しているプログラムはありません。しかし、そのメモリは使用されています。空きメモリではなく、有用なデータが含まれているからです(プログラムが再度実行された場合)。

どのプロセスがメモリを使い果たしてもリストに表示される可能性がありますか。

プロセスでは使用されません。

使用済みメモリについてより多くの情報を提供できるソフトウェアは他にありますか?

RAMMap はこれを行うことができます。

2つの可能性しかありません、RAMを使うことも、無駄にすることもできます。明らかに、最初のほうが良いです。空きメモリは永遠に無駄になります - 明日6GBを使うために4GBのマシンは今日2GBを使うことができません。 「今すぐ無料で欲しいので後で利用できるように」と考えているのであれば、それを忘れてください。あなたは今それを使うことができそして後でそれを使うことができます。

数MBしか使用していなかったと思われる1つのプロセスを数GBまで解放するにはどうすればよいでしょうか。

物理メモリではなく、バッキングストアが不足しています。十分な空き物理メモリがありますが、バッキングを必要とする可能性がある仮想メモリを割り当て続けるのにOSのバッキングストアが不十分です。

このプロセスでは数MBの物理メモリしか使用されていませんでしたが、OSはそれ用に数GBのバックアップ仮想メモリを予約しなければならなかった可能性があります。たとえば、プロセスが2GBファイルの書き込み可能なプライベートメモリマッピングを作成するとします。 OSは、そのマッピングの1バイトごとに書き込む可能性があるため、プロセス用に2GBのバックアップ仮想メモリを予約する必要があります。また、それはそれらのうちのどれにも決して書くことがないかもしれません。これが良いサイズのページングファイルが必要な理由です。

最近のオペレーティングシステムは、決してキャッシュされることのない(RAMを必要とする)たくさんのチェック(有望なバッキングストア)を書きます。すでにたくさんの大きな小切手を現金で書いていたとしても(たとえたくさんのバッキングストアが約束されていても)あなたが銀行に十分なお金(空きRAM)があったとしても小切手(約束のバッキングストア)を書き続けることはできませんあなたが持っているように)。ページングファイルはバッキングストアを追加し、OSがチェックを書き続けることを可能にします。

9
David Schwartz