数日間システムを再起動せずに起動していると、「情報の損失を防ぐためにプログラムを閉じてください」という警告が表示され、プログラムを閉じるように勧めるダイアログが表示されます。このダイアログをキャンセルするか、「プログラムを閉じる」をクリックすると、Windows によってダイアログにリストされているアプリケーションの一部またはすべてが強制的に閉じられるという問題が発生しています。
タスク マネージャーを開くと、現在メモリの約 30% しか使用されていないことがわかります。
リソース モニターを開いて、特定のアプリケーションで使用されているコミット メモリの量を確認すると、メモリ使用量が依然として比較的低いことがわかります。
私はしばらくこの問題を抱えていて、解決策を見つけるのに苦労しています。poolmon を使用してドライバー リークなどの原因を調査しましたが、ドライバー メモリ リークの危険信号として他の人が説明しているものと一致するものが poolmon に表示されたことはありません。特に困惑しているのは、システム メモリの 33% しか使用されていないのに、Win10 がアプリケーションを閉じるように指示する理由です。
答え1
ここに大胆な推測があります。
誰かのランダムな「最適化」アドバイスに従って、スワップ ファイルを無効にしました。
連続した物理 RAM の大きなブロックを必要とする何らかの OS ドライバーがあります。しかし、物理 RAM 全体が時間の経過とともに断片化されているため、それを取得できません。また、スワップ ファイルが無効になっているため、RAM のデフラグを実行できません。
スワップファイルを有効にします。
言った通り、これは推測です。
答え2
最後の質問について - 要約: エラー メッセージは、「コミットされた」仮想アドレス空間に関するものです。2 番目の画面スナップショットのコミット チャージ グラフを見ると、実際に限界に達しているか、限界に非常に近いことがわかります。
「空き」、「使用可能」、「使用中」の RAM の量は関係ありません。特に、「使用可能な」 RAM の不足は、「メモリ不足」または「メモリ不足」メッセージの原因にはなりません。
コミット制限は、RAM の合計サイズ + ページファイル サイズと同じです。コミットされたメモリが割り当てられると、実際にはまだ使用されていないにもかかわらず、すぐに「コミット チャージ」に課金されます。つまり、RAM または PF スペースはすぐには使用されません。物理スペース (RAM またはページファイル) は、メモリが実際に参照されたときにのみ使用されます。それ以降は、プログラムによって解放されるか、プロセス全体が終了するまで、メモリはどこかに置かれる必要があります。
例: ページファイルがないと仮定します。したがって、コミット制限は 16 GB (RAM サイズ) です。ここで、8 つのプロセスがそれぞれ 1 GB の VirtualAlloc(MEM_COMMIT) を試行するとします。結果: コミット チャージは 8 GB 増加します。ただし、RAM にすぐに影響はありません。文房具店で紙のパッドを購入したのに、実際には紙が手に入らなかったようなものです。ただし、新しいシートが必要になるたびに、魔法のように 1 枚現れます。パッド全体 (割り当てられた領域のサイズ) を使い切るまで。
ここで、各プロセスが実際にアクセスするのは 1 GB のうち 100 MB だけだと仮定します。使用される RAM は 800 MB だけになります。
しかし、それぞれがかもしれない1 GB すべてを参照するには、OS は、万が一の場合に備えて、8 GB の RAM + ページファイル領域 (ページファイルがない場合には RAM のみ) が使用可能であることを保証する必要があります。文房具店に戻ると、全員が以前に購入した枚数と同じだけの紙を配布できるように、十分な在庫を保有する必要があります。
したがって、現在コミットされている量が制限に達した場合、OS は VirtualAlloc(MEM_COMMIT) の成功を許可しないようにする必要があります。
なぜでしょうか? プロセスは VirtualAlloc の結果をチェックして成功したかどうかを確認することが期待されているからです。プロセスがこれを実行し、割り当てが成功したことを確認すると、プロセスはコミットされた領域全体への後続の参照が成功すると期待する権利があります。
Windows がコミット チャージがそのスペースを実現するために使用可能なスペースの量を超えることを許可した場合、その期待が常に満たされるとは限りません。
簡単な回避策は、ページファイルのデフォルト(初期)サイズを増やすことです。上記の説明から、これがエラーメッセージを回避できる理由がわかるはずです。そのファイルに何も書き込まれないかもしれないがもう一度言いますが、OSはコミットチャージのスペースが確保されていることを確認します。必要になった場合に備えてプロセスがコミットされたメモリを割り当てるとき、それは単に「OS、私はかもしれない「これだけ必要です。」と言っても、実際に使用するというわけではありませんし、実際に使用したというわけでもありません。
詳細については、私の答えはここにあります。
今....なぜプロセスがそれほど多くないのに、コミットをそれほど多く使用しているかどうかは別の問題です。それを確認するには、タスク マネージャーのパフォーマンス タブのメモリ セクションを表示してください。
答え3
もう 1 つの可能性は、64 ビットではなく、Win10 32 ビットを使用していることです。16 GB の RAM がインストールされていますが、32 ビット OS の制限により、4 GB 以上では実用上問題があります。さらに、OS は物理 RAM に関係なく、要求できる RAM の量にプロセスごとのハード制限を課します。その場合、64 ビット OS に切り替えるか、同時に実行するアプリケーションを減らす以外にできることはあまりありません。