web-dev-qa-db-ja.com

十分な空きメモリがある場合のWindows 10ローメモリ警告

システムを再起動せずに数日間起動した場合、「プログラムを閉じて情報の損失を防ぐ」という警告が表示され、その後プログラムを閉じるかどうかを示すダイアログが表示されます。 「プログラムを閉じる」とWindowsはダイアログに表示されているアプリケーションの一部または全部を強制的に閉じます。

タスクマネージャを開くと、現在メモリの約30%しか使用されていないことがわかります。

33% Utilization

特定のアプリケーションによってコミットされたメモリの使用量を確認するためにリソースモニタを開いても、メモリ使用量が比較的少ないことがわかります。

Resource Monitor

私はしばらくこの問題を抱えていて、解決策を見つけるのに苦労しました。私はpoolmonを使用してドライバリークのような原因を調査しましたが、他の人がドライバのメモリリークのための赤いフラグとして説明したものと一致するものはpoolmonの中で見たことがありません。特に混乱しているのは、システムメモリの33%しか使用されていないのに、Win10がアプリケーションを閉じるように指示しているのです。

25
Brandon

ここではワイルドが推測します。

ランダムな「最適化」アドバイスに従って、あなたはスワップファイルを無効にしました。

連続した物理RAMの大きなブロックを必要とする、ある種のOSドライバがあります。しかし、物理的なRAMのすべてが時間の経過とともに断片化されているため、取得できません。スワップファイルが無効になっているため、RAM最適化を実行できません。

スワップファイルを有効にします。

私が言ったように、ワイルドだと思います。

14
Zan Lynx

最後の質問-ショートバージョン:エラーメッセージは「コミットされた」仮想アドレス空間に関するものです。 2番目の画面のスナップショットで[Commit Charge]グラフを見ると、実際に限界に達しているか、限界に近づいていることがわかります。

[無料]、[利用可能]、または[使用中]のRAMの量は重要ではありません。特に、「使用可能」RAMの不足は、「メモリ不足」または「メモリ不足」メッセージの理由ではありません。

コミット制限は、合計RAM +ページファイルサイズに等しくなります。コミットされたメモリが割り当てられると、実際にまだ使用されていなくても、すぐに「commit charge」に課金されます。つまり、RAMまたはPFスペースはすぐには使用されません。物理スペース(RAMまたはページファイル内)は、メモリが実際に参照されるときにのみ使用されます。それ以降は、プログラムが解放するか、プロセス全体が終了するまで、どこかに存在する必要があります。

例:ページファイルがないため、コミット制限が16 GB(RAMサイズ)であるとします。ここで、8つのプロセスがそれぞれ1 GBのVirtualAlloc(MEM_COMMIT)を試行すると仮定します。結果:コミット料が8 GB増加します。ただし、RAMに直接的な影響はありません!文房具店で紙を買ったように見えますが、実際には紙を手に入れていません。ただし、新しいシートが必要になるたびに、魔法のように表示されます。パッド全体(割り当てられた領域のサイズ)を使い切るまで。

これらのプロセスのそれぞれが、その1 GBのうち100 MBだけに実際にアクセスすると仮定します。使用されるRAMは800 MBのみです。

しかし、それらはそれぞれmightその1 GBをすべて参照するため、OSは8 GBのRAM +ページファイル領域を確保する必要があります...まあ、ページファイルがない場合はRAM ...万が一の場合に備えて利用可能です。文房具店に戻って、彼らは以前に購入したのと同じ数のシートを全員に与えるために十分な紙を在庫に保管する必要があります。

したがって、現在のコミット量が制限に達すると、OSはVirtualAlloc(MEM_COMMIT)の成功を許可することを停止する必要があります。

どうして?プロセスはVirtualAllocの結果をチェックして、成功したかどうかを確認する必要があるためです。そうすると、allocが成功したことが判明すると、プロセスには、コミットされた領域全体への後続の参照が成功することを期待するすべての権利があります。

Windowsがコミット料がそのスペースを実現するために利用可能なスペースの量を超えることを許可した場合、その期待は必ずしも満たされませんでした。

簡単な回避策は、ページファイルのデフォルト(=初期)サイズを増やすことです。上記の説明から、これがエラーメッセージを回避する理由を確認できるはずですファイルに何も書き込まれない場合でも。繰り返しになりますが、OSはすべてのコミットチャージ用のスペースが利用できることを保証しています必要な場合。プロセスがコミットされたメモリを割り当てるとき、彼らは単に「ちょっと、OS、私mightこれだけ必要だ」と言っているだけです。それは、彼らが実際にそれを使うという意味ではなく、確かに彼らがまだ実際に使ったことを意味するものでもありません。

詳細については、「 私の答えはこちら 」を参照してください。

さて...whyプロセスがそれを追加していないように見えるとき、あなたはそれほど多くのコミットを使用している別の質問です。それを確認するには、タスクマネージャーの[パフォーマンス]タブの[メモリ]セクションを表示してください。

14
Jamie Hanrahan