使用可能なメモリが十分にある場合のWindows 10の低メモリ警告


25

システムが再起動せずに数日間稼働していると、「情報の損失を防ぐためにプログラムを閉じる」という警告が表示され、プログラムを閉じるように促すダイアログが表示されるという問題が発生しました。 「プログラムを閉じる」とWindowsは、ダイアログにリストされているアプリケーションの一部またはすべてを強制的に閉じます。

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

使用率33%

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

リソースモニター

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


3
タスクマネージャに移動し、パフォーマンスタブに移動してください。コミット済みメモリフィールドには何が表示されますか?
DrZoo

スクリーンショットを保存しませんでしたが、コミットされたメモリは17.5gb / 19gbのような高い割合で使用できました。
ブランドン

回答:


15

ここでワイルドな推測。

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

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

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

私が言ったように、ワイルドな推測。


まあ、私は最大3GBのページファイルサイズを設定しています。これは、swapfileの意味ですか、それともWindows 10で個別に管理されているものですか?このようなことをすることは不可能ではありません。2015年10月にこのマシンを最初に構築し、コアパーキングを無効にして修正するなど、いくつかのことを試したときにパフォーマンスに非常に悪い問題がありました。最終的に、電力を10%に減らしてすべてのコンポーネントを枯渇させる電力管理スキームがあり、それがシステムパフォーマンスの問題を抱えていた理由ですが、そのエピソードであなたが言ったようなことをした可能性があります。
ブランドン

1
ページファイルのサイズを「システム管理」に変更すると、問題はなくなるでしょう。
スコットチェンバレン

私はかつてシステムを管理していましたが、それでも同じ問題を抱えていました。システム管理に設定すると、ページファイルは64GBであると考えられますが、コミットが非常に高くなると、同じ低メモリ警告が表示されます。しかし、まだ70%程度の物理メモリが利用可能であり、リソースモニターには、リストされているプロセスに60 + gbを超えるメモリが現在コミットされているという表示はありません。
ブランドン

ZanとScottに完全に同意します。この問題を引き起こしているのはあなたのページファイルです(windowsitpro.com/windows-10/…を参照する別のソースも参照してください)。システム管理に設定し、問題が再び発生する場合は、調査を開始します。
Ƭᴇcʜιᴇ007

だから私は、システム管理ページファイルがここでの中心的な答えだと思います。静的な3 GBに設定することは、Windows 10環境では理想的ではないようです。数週間前にこのソリューションを実装し、何が起こったのかを確認するために通常の使用で実行しましたが、リソースモニターの[コミットメモリ]列に表示されるよりも多くのコミットメモリが表示されていますが、メモリが不足していません警告または問題が発生しました。
ブランドン

14

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

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

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

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

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

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

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

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

Windowsがそのスペースを実現するために使用可能なスペースの量を超えるコミットチャージを許可した場合、その期待は常に満たされるとは限りません。

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

詳細については、こちらの回答をご覧ください

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


そのような完璧な答えを説明する言葉はありません。ありがとうございました。
ビニシウスタバレス

-2

別の可能性は、64ビットではなく、Win10 32ビットを使用していることです。16GBのRAMがインストールされていますが、32ビットOSの制限があり、4スポット以上で実際に使用できます。さらに、OSは、物理RAMに関係なく、要求できるRAMの量にプロセスごとのハード制限を課します。その場合、64ビットOSに切り替えるか、同時に実行するアプリケーションの数を減らす以外にできることはあまりありません。


2
OQの場合のように、Win10 32ビットを実行して、タスクマネージャーに合計16 GBを表示させることはできません。そして、OSがRAMでなく仮想メモリに与えるプロセスごとの制限。WindowsでRAM 自体を割り当てるための呼び出しはありません。(まあ、AWE、しかしそれは管理者レベルの特権を取り、ほとんど何もシステムプログラムを除いてそれを使用しません。)仮想アドレス空間を(例えばVirtualAllocと)割り当て、次にそれを使用します; 使用すると、OSはプロセスにRAMを割り当てます(「デマンドページング」)。しかし、もちろんすべてを一度にRAMで実現する必要はありません。
ジェイミーハンラハン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.