2013-11-12 01:10:06 +0000 2013-11-12 01:10:06 +0000
75
75

Windowsはあまりにも多くのRAMを使用して、どのようにリソースを診断するには

私は16GBのシステムRAMを持っています。タスクマネージャ以外のアプリケーションを何も開いていない状態での起動時に、Windowsは約3GBのRAMを使用しています。プロセスタブを見てみましたが、何も異常はないようです。WindowsがこれだけのRAMを使用している理由を調べるにはどうしたらいいのでしょうか。

全ユーザからの全プロセス


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


メモリリークに関連したワイヤレスドライバを再インストールした後。新たにスクリーンショットが出てきたので、本当にメモリリークだったのか確認してみたいと思います。

回答 (4)

85
85
85
2013-11-12 04:54:18 +0000

ドライバが原因でメモリリークが発生しています。パッケージ化されていないカーネルメモリの高い値を見てください。あなたの場合は3.7GBを超えています。poolmon ](http://blogs.msdn.com/b/ntdebugging/archive/2012/08/30/troubleshooting-pool-leaks-part-2-poolmon.aspx) を使用して、どのドライバが高い使用量の原因になっているかを確認することができます。

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

さて、どのプールタグが一番メモリを使っているか見てみましょう。

さて、cmdプロンプトを開いて、findstrコマンドを実行します。これを行うには、cmdプロンプトを開き、"cd C:C:\WindowsSystem32\drivers “とタイプします。そして、"findstr /s #___ ."と入力する。ここで、”____“はタグ(poolmonの一番左の名前)である。これで、どのドライバがこのタグを使っているかがわかります。

0x1&

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

pooltagがWindowsドライバしか表示されていないか、pooltag.txtに記載されている場合("C:\Program Files (x86)\Windows Kits.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 -60sのグロウをキャプチャ。WPA.exeでETLを開き、解析ペインにPoolのグラフを追加。

pooltagカラムを先頭に置き、スタックカラムを追加。ここでWPA.exe内でシンボルをロード プールモンで見たタグのスタックを展開します。

次に、スタックに表示されている他のサードパーティ製ドライバを探します。ここでは、Threタグ(スレッド)はG-DataのAVKCl.exeによって使用されています。これを修正するためにドライバ/プログラムのアップデートを探してください。

15
15
15
2013-11-12 05:41:48 +0000

さて、まず最初に、私がより詳細な回答に入る前に。最初のスクリーンショットでは、Non-Paged Pool(カーネルメモリ使用量の一種)が1.3GBになっています。これは私には異常に高いように思えます、特に起動後30分しか経っていないのに。長時間使用したり、ふるいのように漏れているプログラムを使用したりすると、NP プールがこれだけ高くなるのがわかると思います。対照的に、私のNPプールは通常100~200メガバイトで、ページ化されたプールは400~500にもなるかもしれません(これは何週間も再起動せずにシステムを動かした後の話です)


タスクマネージャでカラムヘッダを右クリックしてカラムの選択を選択することで、いくつかの追加カラムを有効にすることができます。Working Set (private), Working Set (shared), Commit, NP Pool, 0x6& を追加してください。私は、全ユーザの全プロセスをスキャンして、NPプールの容量が約256KBを超えるものがないかどうかを確認します。特にかなり高いものがあれば、それが問題の原因か、少なくともその一部である可能性があります。

プロセスが使用している物理メモリの量である総ワーキングセットは、プライベートと共有ワーキングセット(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 が物理メモリからスワップアウトしてしまうが、それらは要求されているために移動できない)。

プロセスがアクセス可能なメモリ以上のメモリを必要とする場合(32bit プロセスは通常 2Gb、拡張技術を使えば 4Gb 未満のメモリもありますが、64bit プロセスは通常それぞれ約 48Gb のメモリにアクセスできます)、windows はスワップスペースを使ってメモリを仮想化しようとすることがあります。32 ビットのアプリが最大で許可されている 2Gb のスペースを使いたいが、1.2Gb しか利用できない場合、windows はページファイルに 2Gb を完全に確保し、アプリのメモリ使用量をサポートするために、必要に応じてプロセス自身のデータをページファイル内で移動したり、ページファイルの外で移動したりします。この場合の総「メモリ」使用量は、利用可能な物理メモリよりも多いように見えるかもしれません。トータルコミット。総コミット量は通常、総ページファイルサイズの最大値となり、システムが管理している場合、通常は物理メモリ量の 2-3倍になります。あなたの場合、トータルコミットは約 24Gb、つまり 12Gb の物理メモリの 2 倍になります (これは最初のスクリーンショットで示されており、「コミット (GB) 3 / 23」と記載されています)。最初のスクリーンショットでは「コミット (GB) 3 / 23」と表示されています)。)


最後のポイントです。あなたは回答の中で、16GBのRAMを持っていると言いましたが、タスクマネージャは12GBのRAMしか見ていません。ここでは2つのことが考えられます。あなたのシステムが本当に12GbのRAMしか持っていないか、あるいは1つのスティックが正しく登録されていないかのどちらかです。もしRAMのスティック(私は4Gbのスティックを4x4本と想定しています)が故障している場合は、それがマザーボードに完全に固定されていないか、またはマザーボードがメモリ検出に問題を抱えている可能性があります。

後者であるかどうかを確認するには、まずマザーボードのBIOSを最新バージョンにアップデートする必要があります。私も同じような問題を抱えていました…6本のTripple-Channel DDR3スティック(6x2Gb)のRAMは、それぞれを個別にテストした結果、すべて良好でした…しかし、私のマザーボードは、頻繁に1つまたは2つのRAMをカウントしないことをランダムに決めてしまい、8GbのRAMしか残っていませんでした。BIOSのアップデートで問題が解決され、今では12Gbのメモリすべてに確実にアクセスできるようになりました。

12
12
12
2013-11-12 01:35:00 +0000

Windowsが大量のRAMを使用している理由を調べるにはどうしたらいいでしょうか?

RAMの使用量が多いのは、そのように設計されているからです。RAMを使用することに関連したコストは全くありません。実際、使用済み RAM はフリー RAM よりも優れています。フリー RAM を使用するには、それを使用する必要がありますが、それには努力が必要です。

「後で使えるように、今すぐRAMを無料にしたい」と考えているなら、それは忘れてください。RAMは今すぐに無料である必要はありません。今使っても後で使っても構いません。ここではトレードオフはありません – RAMを使うことによるデメリットは全くありません。

RAMは使用され続け、ある用途から別の用途へと直接切り替えられます。最近のオペレーティングシステムは、他に選択の余地がない場合にのみRAMを空き領域にしています。

2
2
2
2017-01-14 12:37:08 +0000

上記に挙げられていない理由はHyper-Vです。

優秀なユーティリティRamMapで特定できました。

スクリーンショットはその後のものです。Driver Locked」以前のメモリは6GBを超えており、この特定のマシンのRAMの80%以上を占めていました。Hyper-V Managerに入って「Dynamic Memory」を無効にしなければなりませんでした。不思議なことに、この機能を再度有効にした後も、「Driver Locked」メモリは低くなったままでした。