リソースモニターとタスクマネージャーの合計RAM使用量がリモートでも合計物理メモリ使用量にならないのはなぜですか?[複製]


30

これは多くの異なるWindowsマシンで、さまざまな機会にこれに気づきました。タスクマネージャーまたはリソースモニターによって報告されるRAM使用量は、実際の使用量よりも大幅に少ない量になることがよくあります。

たとえば、ラップトップまたはデスクトップで何度も使用中の7GBのようなものを見ましたが、ワーキングRAMセットの合計は3GBのようなものです。どこで使用されているのかわかりません!

サーバー上のリソースモニターで今日気付いた極端な例を次に示します。

リソースモニター
クリックしてフルサイズ

画像を右クリックして新しいタブで開き、数値を表示すると、ワーキングセット(非物理仮想メモリを含まない)が合計で約1.7GBになることがわかります。「すべてのユーザーからのプロセスを表示」が有効になっているときに、タスクマネージャーでRAMの使用量を合計すると、同様の数値が得られます。

次に、タスクマネージャーの[パフォーマンス]タブのスクリーンショットを示します。

タスクマネージャー
クリックしてフルサイズ

これは、7.6GBの物理メモリが使用中であることを示しています。

これは、パーソナルコンピューター、ラップトップ、および現在のサーバーで常に見られます。システムツールによって報告されるRAM使用量の合計は、観察するRAM使用量の約1/4しか占めていません。WTFは進行中ですか???

すべてのRAMがどこにあるのか、満足のいく説明はありますか?それをゴブリングしているのは何ですか、そしてなぜそれは痕跡を残さないのですか?

編集:ここに、ユーザーwhが要求したグラフィカルRAM使用の写真があります:

RamMapの使用
クリックしてフルサイズ

編集2:ジェームズの応答に応じて、ここにpoolmon.exe、サイズでソートされた非ページ化プロセスの写真があります:

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

これらの結果は私を混乱させます。poolmon私は6GBの非ページプールを使用していると正しく述べていますが、すべての非ページプールプロセスのサイズは8MB未満です。

これはどういう意味ですか?非poolmonページプールを使用するプロセスの一部を検出できませんか?



リソースモニター>メモリタブの画像(色と数字の下部のみ)を投稿してください。それはもっとわかりやすいでしょう。
whs

2
@Ramhound:そのリンクを教えてくれてありがとう!残念ながら、ちょうどリクエストしたとおり、リソースモニターの物理メモリのグラフィカルマップの写真をアップロードしましたが、物理メモリのスタンバイ部分はRAMの合計使用量の2%未満です。David Schwartzの答えは、「隠された」RAMの使用はスタンバイRAM(つまり、キャッシュされたデータと使用されていないコードに使用されるRAM)から来ていることを示唆しています。そのため、Davidの答えが何が起こっているのかを説明するとは思わない。
DumpsterDoofus

プログラムRamMapを使用して、さらに調査します。これまでのところ、一部のドライバーはおかしくなりそうですか?しかし、実際にはスタンバイ(キャッシュ)ではありません。RAMを修正するためにalledgeする特別なプログラムを実行しますか、それともコンピューターを高速化することを想定していますか?コンピューターに特別な奇妙なドライバー項目はありますか?
サイコギーク

2
「以前に回答した」へのリンクは、このケースをカバーしていません。
ジェイミーハンラハン

回答:


30

申し訳ありませんが、これは軽快な回答のように聞こえますが、タイトルの質問に対する答えは「彼らは想定されていないから」です。

または、もっと丁寧に言うと、プロセスのプライベートワーキングセットにはないRAMが多く使用されています。その一部はプロセスの共有ワーキングセットにありますが、共有のために、実際の使用状況についての信頼できる概念を得ることができません。プロセスの数値を合計すると、結果が大きくなりすぎます。

RAMを占有する非ページプール、ページプールの常駐部分、および他のカーネル空間使用の常駐部分など、タスクマネージャーの「プロセス」表示にはまったく表示されません。

特定の問題について:

タスクマネージャー画面で、「カーネルメモリ」セクションを参照してください。6 GBの「非ページメモリ」(非ページプール)があります。これは、2番目のグラフの「使用中」セクションの一部です。非ページプールはどのプロセスにも課金されないため、タスクマネージャーでプロセスごとの数を合計しても使用中の合計に近くならないのはこのためです。一部のドライバーはおそらくそれを使用しています。これは完全に過剰な量です。1 GB未満である必要があります。非ページプール使用の過剰な部分を担当するドライバーは間違いなくバグです。

RAMmapはこれを確認できます([使用回数]タブで、[非ページプール]の合計を確認します)が、どのドライバーがそれを引き起こしているかを見つけるのに役立ちません。

見つける方法は次のとおりです。Microsoftツール「poolmon」のコピーを入手します。これは、Windows Driver Kitと共に配布されるキャラクターモードツール(少年、これまで)です。Windows 7の場合、WDKは無料でダウンロードできます。全部(ISO)をダウンロードしてインストールする必要がありますが、必要な場合はツールのみをインストールすることもできます。

WDKディレクトリでpoolmonを見つけます-必ず32ビットまたは64ビットの正しいものを選択して、管理者のコマンドプロンプトから実行してください。次のような表示が得られます。

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

次に、「タイプ」列に「Nonp」のみが表示されるまで、「p」キーを押します(いいえ、冗談ではありません。ここにはメニューはありません!)。次に、「b」(必要に応じて2回)を押して、表示をBytes列の降順でソートします(サンプルで既に実行されています)。

次に、一番上の行の「タグ」列を確認します。ここに示されている(明らかに人工的な)ケースでは、「リーク」です。(このシステムは、この問題を引き起こすために意図的にバグが付けられたドライバーを実行しています。これは、非ページプールを「リーク」しています。)

ところで、強調表示されている行は、この古風な画面に対する前回の更新以降に変更された行です。

次に、その文字列を含む.sysファイルをc:\ Windows \ System32 \ Driversで検索します。この場合、次のように「リーク」を探します。

c:\windows\system32> findstr /s Leak *.sys

次に、その文字列および/またはそのドライバー名への参照をウェブで検索します。

ここに戻って、.sysファイルから氏名、製造者名などを報告することも役立ちます。

(私の予想では、見つけたタグはECMCであり、ドライバーはintmsd.sysであり、ExpressCacheまたはIntelliMemoryという製品に関連付けられています。その製品を「アンインストール」します。問題を修正するアップデートがありますが、修正バージョンでは、この製品によってシステムのパフォーマンスが向上したことは一度もありません。これは、Windowsに既にある機能を本質的に複製します。

その方法が見つからない場合、次のステップは「Windows Performance Toolkit」を使用することです。方法については、magicandre1981の回答をもとに、このフォーラムでその文字列を検索してください。xperfに言及する回答は無視してください-これは古いバージョンのツールです。

更新:コメントによると、OPは上記を実行し、poolmonが非ページプールの合計サイズは実際に巨大であると報告したが、割り当てられたすべてのピースは明らかに小さいことを発見しました。私の推測(これもコメントにあります)は、これは「肥大化」プールと呼ばれるものによるものです:プールが割り当てられてから解放されましたが、何らかの理由でプールに割り当てられたRAMの量が「解放」を反映して縮小されなかった。magicandreがこの回答で説明した手順に従うことで、犯人を特定できる場合があります。


他の人よりも詳しく調査してくれてありがとう!poolmon時間がある場合は、今日を使用してリークを探し、あなたの答えをよりよく読んで理解してください。おそらくメモリリークがあると言っていますか?もしそうなら、恐ろしいメモリリークがあることが知られているソフトウェアに取り組んでいるので、それは完全にもっともらしいです。
DumpsterDoofus

@DumpsterDoofus:はい。おそらく、カーネルモードドライバーにメモリリークがあります。これは、アプリのメモリリークとは異なります。
ジェイミーハンラハン

そこで、ようやくpoolmon.exe問題のサーバーで実行し、スクリーンショットを含めるように質問を編集しました。poolmon私は6GBの非ページプールを持っていると述べています(タスクマネージャのスクリーンショットから指摘したように)が、「Nonp」プロセスのみを見てサイズで並べ替えると、それらはすべて小さなものです(最大は8MBです)。poolmon非ページプールの使用量の大部分が検出されない理由はありますか?
DumpsterDoofus

2
ああ...ここでの問題は「使用」という言葉にあります。したがって、6 GBの非ページプールがありますが、現在使用されているのはごく一部です。残念ながら(TMではなく、poolmonではなく、RAMmapではありません)、プールの実際の使用量はわかりません。私の推測では、一度にヘビープールユーザーがいたので、プールがそれを収容するために拡張され、その後ヘビーユーザーがいなくなりました。プールが処理される方法のため、割り当てが大きな連続したチャンクであった場合を除き、一度割り当てられたRAMを解放することは容易ではありません。システムを新しく起動した後、これを見ることをお勧めします。
ジェイミーハンラハン

そこServer 2003のサポートツールで利用できるpoolmon.exeのバージョン(だserverfault.com/questions/84479/...は少し古いが、それは単なる5.2メガバイトのダウンロードだし、まだ(少なくとも)サーバー2016上で動作します- )。
mwfearnley
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.