Windowsが大量のRAMを使用している、リソースの占有を診断する方法


73

16GBのシステムRAMがあります。起動時に、タスクマネージャーWindowsが約3GBのRAMを使用していることを除いて、アプリケーションが開かれていない。私はプロセスタブを見ましたが、何も異常ではないようです。Windowsが大量のRAMを使用している理由を調べるにはどうすればよいですか。

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

すべてのユーザーからのすべてのプロセス

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


poolmonから読むと、私のワイヤレスBroadcomドライバーは約0.4GBのRAMを使用しているようです。削除しても、起動時に2.6GBを使用することになりますが、それでも大きすぎます。

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


メモリリークに関連するワイヤレスドライバーを再インストールした後。新しいスクリーンショットを取得しましたが、実際にメモリリークであったことを確認したいと思います。

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


3
まず、12GBしかありません。4つの4GBスティックのいずれかが不良であるか、正しく取り付けられていないか、マザーボードが16GBをサポートしていません。次に、マルウェアをチェックするためにセキュリティプログラムを実行しようとしましたか?Security Essentialsはビルトインされているため、定義を更新してスキャンを実行してください。また、ルートキットは特に隠れているため、いくつかのアンチルートキットプログラムを試してみてください(ただし、通常は気づかないようにロープロファイルを維持しようとしますが、数ギガバイトのRAMを使用することはほとんどありません)。
Synetech

あなたは、パフォーマンスを見たいかもしれません- >リソースモニタ
ジャーニーマンオタクは

出力をファイルC:\ blah> tasklist> aaにリダイレクトするtasklistコマンドを実行してみて、ファイルaaを開くと、各プロセスの合計(15,100Kなど)が表示され、その後のKが削除され、Excelで合計が合計されます。合計が、タスクマネージャーが使用するグラフに近い使用量に一致するかどうかを確認します。私にとって、タスクリストの合計は4GBで、タスクマネージャーは4.5GBと言います。矛盾を説明することはできませんが、それほど大きくはありません。大きな不一致がある場合は興味深いでしょう。
-barlop

エクセルを持っていない
ベイダー

1
NDxxタグはndis.sysです。BRCMはBroadcomだったと思います。ネットワークアダプターに問題があることを示しています。
デビッドマーシャル

回答:


82

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

Windows WDKをインストールし、poolmonを実行し、non pagedが一番上にあるようPにプールタイプの後にソートし、Bほとんどのメモリを使用するタグを確認するためにafterバイトを介してソートします。WDKがインストールされているフォルダーに移動してpoolmonを実行し、ツール(またはC:\ Program Files(x86)\ Windows Kits \ 10 \ Tools \ x64)に移動して、poolmon.exeをクリックします。

次に、以下に示すように、どのpooltagがほとんどのメモリを使用するかを確認します。

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

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

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

ここで、driversフォルダー(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 -stackwalk PoolAlloc + PoolFree + PoolAllocSession + PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\ pool.etl

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

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

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

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


1
あ、ごめんなさい。@Jebediah Kerman、findstrコマンドを実行しましたか?名前から、ネットワークカードドライバーに関連する可能性があります。それでも問題がある場合は、RAMMapを実行し、データをRMPとして保存し、RMPファイルを圧縮してzipをアップロードします。
magicandre1981

これは愚かに聞こえるかもしれません。しかし、どうすればpoolmonを起動できますか。私は「poolmon.exe」を検索して起動できるようにするために使用
ベイダー

@JebediahKermanあなたはすでにこれをやっていて、タグを見つけたと思います。投稿の写真はプールモンではありませんか?
magicandre1981

写真は私のものです。何らかの理由で検索インデックスが不完全でした。
ベイダー

@JebediahKermanあなたはこのNDFTが何であるか見ましたか?また、xperfを使用してプールの使用状況を追跡できます。channel9.msdn.com
Shows

15

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


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

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

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


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

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

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


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

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


私はちょうど彼の非ページメモリが非常に大きいことに気づきました..mineは539MBページ、139MB非ページです。Uは明らかにこれについて私よりも多くを知っています。しかし、あなたは完全なコミットで間違っています。U 「合計コミットは通常、総ページファイルサイズで最大になります」と書きます。RAMは12GBです。ページファイルを最大4000MB(3.8GB?)に設定し、最大1.5-2xのメモリに設定します。最大コミットは15GB(commit = 7 / 15現在)、私のページファイルは約4GBまたはおそらく3.8GBのように少し少ないです。最大コミットはページファイルサイズ+ RAMサイズのようなものです。ページファイルが12GBの場合、最大コミットは約24GBでした。ページファイルのほぼ3.8ギガバイトまたは4ギガバイト最大コミットは15ギガバイトである
barlop

@barlop:さて、あなたはコミットとは多少誤解しています。技術的に言えば、コミットチャージは、拡張されたメモリマネージャと大規模なアドレス認識によってサポートされるスペースを含む、「仮想的にアドレス可能なメモリスペース」の合計です。最大コミットはページファイル+ RAMではなく、システム管理の仮想アドレス空間全体として説明されます。通常、ページファイルは、少なくとも物理メモリの合計サイズをカバーし、さらに物理メモリの合計サイズを超えて拡張する必要があります。あなたのケースでは、私が期待しているだろう、少なくとも18GB(1.5倍)または24GB(2倍)であることをコミットし、しかしその...
jrista

...システム管理ページファイルの場合です。ページファイルの設定を手動で調整したように聞こえますが、その場合、現在のコミットが15Gbである理由を特定するために、特定の構成について詳しく知る必要があります(3.8 / 4Gbページファイルは15Gbではなく16Gbのコミットを示すため) 。)ページファイルを手動で構成することも、小さすぎるページファイルを手動で構成することもできます。これにより、パフォーマンスの問題やメモリ割り当ての問題が発生する可能性があります。非常に具体的なサーバー(データベースなど)のセットアップがない限り、Windowsでページファイルを管理できるようにすることをお勧めします。
jrista

最後のメモ。最大限のパフォーマンスを得るには、Windowsに事前に最大ページファイルサイズを割り当てさせることが最善です。これは通常、SQL Serverデータベースなどのサーバーセットアップで実行され、最大のパフォーマンスを得るために複数の物理ディスクに均等に分散されるページファイルに64Gb以上(通常は物理RAMサイズの2倍、おそらく128Gbまたは256Gbでも)を事前に割り当てることができます。分散ページファイルは、特に最大サイズに事前に割り当てられている場合、参加しているすべてのディスクでインターリーブされた読み取り/書き込みを許可するため、パラレルI / Oによるページングパフォーマンスが向上します。
jrista

重いメモリ負荷の例として、私のシステムには現在、7.5 / 12Gbの物理メモリ使用量があります。14.7 / 23.3Gbコミット; 491MBのページプール。145MBのNPプール。これは146プロセス、最大ページプール2276k、最大npプール263kの場合です。最大のコミットサイズは696,396kで、同じプロセスのWSは714,256k(Operaタブプロセス)です(プロセス数が多いのはWebブラウザによるものです...最近のプロセスでタブを分離し、ハイパータバーです...一度に
多数の

12

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

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

「今すぐRAMを解放して後で使用できるようにしたい」と思っているなら、忘れてください。後で使用するために、RAMをすぐに解放する必要はありません。あなたは今、それを使用することができますし、後でそれを使用しています。ここにはトレードオフはありません。RAMを使用することの欠点はまったくありません。

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


12
私のwindows7システムが起動時に3GBのRAMを使用していて、アプリが開かれていない場合、何かが間違っているはずです
Vader

5
@JebediahKermanなんでそんなこと言うの?なぜそうではないのか、なぜWindowsがそうするように設計されているのかを説明しようと努力しました。私の説明を理解できませんでしたか?または、あなたがそれに同意しない場合、あなたは私が間違っていると思う場所を説明できますか?
デビッドシュワルツ

11
@DavidSchwartzのまったく間違った答え。彼はドライバーによるメモリリークがあります
-magicandre1981

9
@DavidSchwartz:説明する動作(再利用可能なRAM割り当て)は、必ずページング可能なメモリから作成する必要があります。心配なのは、1.3 GBの非ページメモリです。それを他のリソースのためだけに解放することはできません。1.3GBバイトはどこに行くのでしょうか?「非ページ」とは、所有者が「これらのバイトは非常に重要であり、ディスクに置くことさえできず、破棄することさえできない」と言ったことを意味します。
–MSalters

25
なぜこの「答え」が非常に高く投票されるのですか?それは完全にポイントを逃します。関係なく(そもそも完全に透明であった)使用される特定の単語の、問題ではない“Why is Windows using RAM?”、問題がある“Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?”、それは実際の問題に対処したりしないので、この投稿は、最高の状態でコメントする必要がありますしようとし、それに答えるように。OPが示唆されたように無視した場合、メモリリークは発見されないため、少しアドバイスがありますが、悪いアドバイスがあります。
Synetech

2

上記に記載されていない理由は、Hyper-Vです。

私は優れたユーティリティRamMapでそれを特定することができました:

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

スクリーンショットは後からのものです。「Driver Locked」メモリが6GBを超える前、このマシンのRAMの80%以上。Hyper-Vマネージャーに移動して、「動的メモリ」を無効にする必要がありました。不思議なことに、それを再度有効にした後でも、「ドライバーロック」メモリは低いままでした-以前のインスタンスがそれを増やし、Hyper-Vが割り当てられたメモリを自動的に削減しないと推測できます:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.