web-dev-qa-db-ja.com

ありにも多くのRAMを使用しているウィンドウ、どこのようにリソース占有を診断する

私は16GBのシステムRAMを持っています。タスクマネージャ以外のアプリケーションを開かずに起動するとWindowsは約3GBのRAMを使用します。プロセスタブを見ましたが、普通のことではないようです。どうして私のウィンドウズがそんなに多くのRAMを使っているのか調べることができます。

enter image description here

全ユーザーの全プロセス

enter image description here


Poolmonから読むと、私のワイヤレスブロードコムドライバは約0.4GBのRAMを使用しているようです。私が削除したとしても、起動時にはまだ2.6GBを使用しているでしょう。

enter image description here


メモリリークに関連付けられているワイヤレスドライバを再インストールした後。私は新しいスクリーンショットを持っていて、それが本当にメモリリークであることを確認したいです。

enter image description here

71
Vader

ドライバによるメモリリークがあります。非ページカーネルメモリの高い値を見てください。あなたの場合、これは3.7 GB以上です。どのドライバが高い使用率を引き起こしているかを確認するには、 poolmon を使用できます。

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

次に示すように、どのpooltagが最もメモリを使用しているのかを確認します。

enter image description here

Cmdプロンプトを開き、findstrコマンドを実行してください。これを行うには、cmd Promptを開き、引用符なしで "cd C:\ Windows\System32\drivers"と入力します。次に、「findstr/s __」と入力します。ここで、__はタグです(poolmonの左端の名前)。どのドライバがこのタグを使用するかを見るためにこれをしてください:

enter image description here

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

Pooltagが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 - スタックウォークPoolAlloc + PoolFree + PoolAllocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode循環&&タイムアウト-1&xperf -d C:\ pool.etl

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

最初にpooltag列を置き、stack列を追加してください。さて シンボルをロードする WPA.exeの中に入って、poolmonで見たタグのスタックを拡張しましょう。

enter image description here

今すぐあなたがスタックで見ることができる他のサードパーティ製のドライバを見つけます。ここでThreタグ(Thread)はG-DataのAVKCl.exeによって使用されます。それを修正するためにドライバ/プログラムのアップデートを探します。

81
magicandre1981

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


タスクマネージャーでいくつかの追加列を有効にするには、列ヘッダーを右クリックし、列の選択を選択します。 Working Set (private)Working Set (shared)Commit、およびNP Poolを追加する必要があります。すべてのユーザーからすべてのプロセスをスキャンし、それらのいずれかが約256KBを超えるNPプールを持っているかどうかを確認します。何か、特にかなり高いものが見られる場合、それが問題の原因であるか、少なくともその一部である可能性があります。

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

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


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

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

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


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

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

15
jrista

どうして私のウィンドウズがそんなに多くのRAMを使っているのか調べることができます。

それは設計されているため、非常に多くのRAMを使用しています。 RAMの使用に伴うコストは絶対にありません。実際、used RAMはfree RAMより優れています。オペレーティングシステムが使用するために何もする必要がないからです。 free RAMを使用するには、それを使用する必要がありますが、これには手間がかかります。

「RAMを今すぐ無料で使用し、後で使用できるようにする」と思っている場合は、忘れてください。 RAMは、後で使用するために今すぐ解放する必要はありません。あなたは今それを使うことができますそして後でそれを使います。ここでnoのトレードオフはありません - RAMを使用することのマイナス面は全くありません。

RAMは、使用されたままにされ、再度使用されるようにしなければならないだけでそれを解放するという努力をする必要なく、使用ごとに直接切り替えられます。最近のオペレーティングシステムは、他に選択肢がない場合にのみRAMを解放したままにします。

12
David Schwartz

上記で言及されていない理由はHyper-Vです。

私はそれを優れた効用 RamMap で識別することができました。

enter image description here

スクリーンショットは後からです。 "Driver Locked"メモリが6GBを超える前は、このマシンのRAMの80%以上でした。私はHyper-Vマネージャに入り、「動的メモリ」を無効にしなければなりませんでした。不思議なことに、それを再び有効にした後でさえ、 "Driver Locked"メモリはローのままでした - 私は以前の例がそれを増やしただけでHyper-Vが自動的に割り当てられたメモリを減らさないと思います:

enter image description here

1
Dagelf