あまりにも多くのRAMを使用しているWindows、リソースの占有を診断する方法



Windows Using Too Much Ram



解決:

ドライバが原因でメモリリークが発生しています。非ページカーネルメモリの高い値を見てください。あなたの場合、これは3.7GBを超えています。 poolmonを使用して、使用率の高いドライバーを確認できます。

Windows WDKをインストールし、poolmonを実行し、プールタイプの後にPで並べ替えて、非ページングが一番上になり、バイトの後にBで並べ替えて、ほとんどのメモリを使用するタグを確認します。 WDKがインストールされているフォルダーに移動してpoolmonを実行し、ツール(またはC: Program Files(x86) Windows Kits 10 Tools x64)に移動して、poolmon.exeをクリックします。



次に示すように、どのプールタグが最も多くのメモリを使用しているかを確認します。

ここに画像の説明を入力してください



次に、cmdプロンプトを開き、findstrコマンドを実行します。これを行うには、cmdプロンプトを開き、引用符なしで「cdC: Windows System32 drivers」と入力します。次に、「findstr / s__」と入力します。 '、ここで__はタグ(poolmonの左端の名前)です。これを実行して、どのドライバーがこのタグを使用しているかを確認します。

ここに画像の説明を入力してください

次に、driversフォルダー(C: Windows System32 drivers)に移動し、問題のドライバー(上の画像の例ではintmsd.sys)を右クリックします。 [プロパティ]をクリックし、[詳細]タブに移動して、製品名を見つけます。その製品のアップデートを探してください。



プールタグにWindowsドライバーのみが表示されているか、pooltag.txtにリストされている場合('C: Program Files(x86) Windows Kits 8.1 Debuggers x64 triage pooltag.txt')

xperfを使用して、使用の原因を追跡しました。 Windows SDKからWPTをインストールし、管理者としてcmd.exeを開いて、次のコマンドを実行します。

xperf -on PROC_THREAD + LOADER + POOL -stackwalk PoolAlloc + PoolFree + PoolAllocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C: pool.etl

成長の30-60をキャプチャします。 WPA.exeでETLを開き、プールグラフを分析ペインに追加します。

プールタグ列を最初に配置し、スタック列を追加します。次に、WPA.exe内にシンボルをロードし、poolmonで表示されたタグのスタックを展開します。

ここに画像の説明を入力してください

次に、スタックで確認できる他のサードパーティドライバーを見つけます。ここに3つのタグ(スレッド)は、G-DataのAVKCl.exeによって使用されます。それを修正するためのドライバー/プログラムの更新を探します。


さて、最初に、より詳細な答えに入る前に。最初のスクリーンショットでは、非ページプール(カーネルメモリ使用量の一種)は1.3GBです。これは、特に起動後わずか30分間は、私には異常に高いように思われます。長期間使用した後、またはふるいのように漏れていたプログラムを使用した後、NPプールがこれほど高くなるのを見ることができたと思います。対照的に、私のNPプールは通常100〜200メガバイトであり、ページプールは400〜500メガバイトになる可能性があります(これは、システムを数週間再起動せずに実行した後です)。


列ヘッダーを右クリックし、[列の選択]を選択すると、タスクマネージャーでいくつかの追加の列を有効にできます。追加する必要がありますワーキングセット(プライベート)、ワーキングセット(共有)、コミットし、NPプール。すべてのユーザーのすべてのプロセスをスキャンして、約256KBを超えるNPプールがあるプロセスがあるかどうかを確認します。何か、特にかなり高いものを見つけた場合は、それが問題の原因であるか、少なくともその一部である可能性があります。

プロセスで使用されている物理メモリの量であるワーキングセットの合計は、プライベートワーキングセットと共有ワーキングセット(WS)の組み合わせです。通常、ほとんどのプロセスではプライベートの方が大きくなりますが、共有WSを大量に使用するプロセスもあります。通常、この2つを合計するとWSの合計になります。コミットは、バッキングストア(ほとんどの場合、Windowsページファイル)にコミットされたワーキングセットの量です。バックグラウンドアプリケーションは、WSよりもコミットが大きいことがよくあります。これは、ページプールの多くがメモリからページングファイルにスワップされていることを示します(これは、最小化されてしばらく使用されていないデスクトップアプリではごく普通のことです)。

非ページプールは、物理メモリからスワップアウトできない、またはスワップアウトしないメモリです...これは事実上、永続的な最小物理メモリ使用量です。 NPプールメモリには、正しくまたは安全に動作するために物理メモリに存在する必要があるプログラムコードとクリティカルセクション、特別なヒープなどが含まれることがよくあります。60のプロセスのうち、すべてに256KBのNPプールメモリがある場合、物理メモリの絶対最小使用量約15,360KBになります。ほとんどの場合、1つまたは2つのアプリに256KBのNPプールがありますが、ほとんどのアプリにはそれより少ない、多くの場合かなり少ない(またはまったくない)ものがあります。システムがすべてのプロセスのワーキングセット全体をページアウトする可能性は非常に低いため、メモリ使用量がこれほど低くなるとは思わないでください。


最後に、メモリを増やすことのポイントは、物理ディスク上の拡張メモリスペース(スワップ、ページファイル)との間でデータをページングする必要がないようにすることです。ページングは​​、割り当てられた物理メモリのブロックを移動し、一部をディスクにプッシュし、他のブロックをディスクから物理メモリに取り込むプロセスです。ページングは​​、単純にするために、非常に望ましくありません。それ自体は「悪い」ものではありませんが、頻繁に発生すると、パフォーマンスが大幅に低下する可能性があります。システム内の物理RAMの合計を増やす最終的なポイントは、より多くのプロセスがより多くのコミットを物理メモリ(より大きなワーキングセット)に保持できるようにすることです。メモリの消費は問題ではありません。実行中のプロセスが多くメモリを使用すると、メモリアクセス(特にページフォールト)に関連する物理ディスクアクティビティが低くなるため、通常、システム全体のパフォーマンスとアクティブなプロセスのパフォーマンスが高くなります。

Windowsはメモリを管理し、ページ(スワップ)ファイルとの間でメモリのデータを自動的にページインおよびページアウトします。 9GBのメモリを必要とするプロセスを実行し、システムがすでに4GB(12GBのうち)を使用している場合、システムは、ワーキングセット全体にすぐにアクセスする必要のないプロセスを自動的に判断し、一部またはすべてをページングしますその余分な1GBを解放するために、ページングされたプールをスワップアウトします。大規模なプロセスが最終的により多くのメモリを必要とする場合、Windowsは、新しく要求されたブロックを割り当てるのに十分な空き領域ができるまで、他のプロセスのワーキングセットをさらに削減します。大規模なプロセスは、最終的にNPプールを除くすべての使用可能なメモリを消費し、Windowsがワーキングセットを解放できないようにするプロセスを定期的に実行するための追加の最小限のオーバーヘッドを消費する可能性があります(つまり、Windowsがスワップアウトする保留中のページフォールトがあります)物理メモリですが、要求されているため、移動できません。)

プロセスがアクセスを許可されているよりも多くのメモリを必要とする場合(32ビットプロセスは通常2Gbにアクセスでき、高度な技術を使用すると4Gbより少し少ないものもありますが、64ビットプロセスは通常それぞれ約48Gbのメモリにアクセスできます)、ウィンドウは時々試行しますスワップスペースを使用してメモリを仮想化します。 32ビットアプリが最大許容2Gbのスペースを使用したいが、1.2Gbしか使用できない場合、Windowsはページファイル内の2Gb全体を予約し、必要に応じてプロセス自身のデータをページファイルに移動したりページファイルから移動したりします。アプリのメモリ使用量をサポートします。この場合の「メモリ」の合計使用量は、Total Commitを実行すると、使用可能な物理メモリよりも多いように見える場合があります。 Total Commitは通常、総ページファイルサイズで最大になります。これは、システムで管理されている場合、通常、物理メモリ量の2〜3倍です。あなたの場合、Total Commitは約24Gb、つまり12Gbの物理メモリの2倍になります(これは最初のスクリーンショットに示され、Commit(GB)3/23と記載されています)。


最後にもう1つ。あなたはあなたの答えであなたは16GbのRAMを持っていると言いましたが、タスクマネージャーは12GbのRAMしか見ません。ここで2つのうちの1つ。システムに実際に12GbのRAMしかないか、スティックの1つが正しく登録されていません。 RAMのスティック(4x 4Gbスティックを想定しています)の場合は、不良であるか、マザーボードに完全に正しく装着されていないか、マザーボードにメモリ検出の問題がある可能性があります。

後者かどうかを確認するには、最初にマザーボードのBIOSを最新バージョンに更新する必要があります。私も同様の問題を抱えていました... RAMの6つのトリプルチャネルDDR3スティック(6x 2Gb)は、それぞれを個別にテストした結果、すべて良好でした...しかし、マザーボードは、それらの1つまたは2つを頻繁にカウントしないことをランダムに決定しました。多くの場合、8GbのRAMしか残していません。 BIOSアップデートで問題が修正され、12Gbのメモリすべてに確実にアクセスできるようになりました。


WindowsがRAMを大量に使用している理由を知るにはどうすればよいですか。

それがそうであるため、それは非常に多くのRAMを使用しています 設計 そうするために。 RAMの使用に関連するコストはまったくありません。実際、オペレーティングシステムはそれを使用するために何もする必要がないため、使用済みRAMは空きRAMよりも優れています。空きRAMを使用するには、RAMを使用する必要があり、手間がかかります。

「RAMを今すぐ空けて後で使用できるようにしたい」とお考えの場合は、忘れてください。 RAMは、後で使用するために今すぐ空いている必要はありません。今すぐご利用いただけます 後で使用してください。がある 番号 ここでのトレードオフ-RAMを使用することにマイナス面はまったくありません。

RAMは使用され続け、使用を再開するためだけにRAMを解放する手間をかけずに、ある使用から別の使用に直接切り替えられます。最新のオペレーティングシステムは、他に選択肢がない場合にのみRAMを空けておきます。