web-dev-qa-db-ja.com

プログラムを実行していないのに、メモリが65%使用されているのはなぜですか?

プログラムを実行していないのに、メモリが65%の使用率を示している理由がわかりません。

そして時々それは行き詰まっている。

私のラップトップの仕様:

Acer Aspire VX 15
OS:Windows 10 x64最新のアップデート
RAM:24 GB DDR4 2400
SSD:512 GB
HDD:1 TB
CPU:corei7第7世代7700HQ 2.8
グラフィック:GeForce GTX 1050Ti GDDR5

Screenshot of Processes

Screenshot of Processes

Screenshot of Performance

Screenshot of RAMMap

Screenshot of RAMMap

3
Martin

tl; dr: FindZombieHandles から5つのファイルをすべてダウンロードして実行し、どのプロセスがすべてのゾンビを作成しているかを確認します。


この問題に気づくのは正しかった。1

一般的な原因はいくつかあります。

  • 特にGDIオブジェクトのハンドルリーク
  • ハンドルリークによりゾンビプロセスが発生する
  • ドライバーのロックされたメモリ。これは、バグのあるドライバーまたは通常の操作が原因である可能性があります(たとえば、VMwareバルーニングは、意図的に「RAM= VM間でバランスをとろうとする)」

詳細情報を取得する

ここで最初にできることは、優れた RAMMap ツールを使用することです。これにより、メモリ使用量が分類される広範なカテゴリが識別されます。これらは必ずしもそれが何であったかを示すものではありませんが、次にどこを見ればよいかを示唆しています。

あなたの特定のケースでは、私は あなたが提供したスクリーンショット を再度参照します。 Active列を確認します— Standby列には、「利用可能な」メモリに該当するキャッシュが含まれています。 Page Tableは非常に高いことに注意してください。これは、512 MB未満の球場になると思いますが、2 GBを超えることはありません。

それを絞り込む

ここから推測できます。おそらくゾンビプロセスが原因です。 Windowsでゾンビプロセスが発生する可能性があるのは、あるプロセス 起動 別のプロセスが起動したプロセスに ハンドルを保持 した場合です。起動されたプロセスが終了すると、起動プロセスはそれらのハンドルを解放することが期待されます。それが起こらない場合、起動プロセスが存在する限り、それらはとどまります。

実際には、RAMMapの[プロセス]タブでさらに確認できます。あなたのケースでは、プロセス名、tasklist.exethousands、何百ものpowershell.exeインスタンスがぶら下がっているので注意してください。実際、プライベートメモリ使用量が0 Kであるものは、終了したがまだゾンビ化しているプロセスのレッドフラグです。

ここで、whichプロセスがこれらのすべてのゾンビを作成していることを把握する必要があります。これを行うにはいくつかの方法があります。 [詳細]タブでタスクマネージャを使用して、[ハンドル]列を追加できます。多数のゾンビを保持しているプロセスでも、過剰な数のハンドルが開かれます。 Process Explorer を使用して、特定のプロセスが開いているハンドルを確認することもできます。

ただし、はるかに簡単な方法は FindZombieHandles を使用することです。2 (5つのファイルすべてを同じディレクトリにダウンロードする必要があります)。このツールを(管理者として)実行すると、これらのゾンビを作成および保持しているプロセスがわかります。そこから、プロセスを強制終了したり、アプリケーションをアンインストールしたり、開発者に報告したりできます。


1 他の場所で説明したように、タスクマネージャーの[プロセス]タブには、メモリ使用量excludeのディスクキャッシュが表示されるため、「free RAM is浪費です」は通常適用されません。タスクマネージャに関する限り、ディスクキャッシュは利用可能なメモリの一部です。「空き」メモリについては言及されていません。

2 このツールについて Bruce Dawson に感謝します。

3
Bob

無料RAMは永久に無駄になる機能です。16GBのRAMを現在使用しているシステムは、24GBを明日使用できません。保存することはできません。 RAM for later。このため、最新のオペレーティングシステムは、RAMを無駄にしないようにできる限り常に使用するよう努めていますRAM可能な限り。

システムがより多くのRAMを解放することになったとしましょう。これは、そのRAMを解放するために今少しの努力が必要であることを意味します。システムには十分な空きがあるので= RAMすでに、この努力に見返りがない可能性があります。システムがRAM解放したことを使用したい場合、それを再度使用する必要があります。それを自由にするために行った作業を元に戻すためにより多くの努力を払う。

したがって、たとえば、システム上のプログラムがファイルを読み書きするときに、システムに十分なRAM= freeがある場合、そのデータはメモリに保持されます。他のプログラムがそのファイルを読み取る場合、ディスクI/Oが保存されます。そのメモリが後で他の目的で必要になった場合は、ある用途から別の用途に移行するだけで、再び使用するためだけに解放する手間を省くことができます。

つまり、オペレーティングシステムは効率的です。ほとんどすべての最新のオペレーティングシステムはこの方法で動作します。

1
David Schwartz