[debugging] プライベートバイト、仮想バイト、ワーキングセットとは何ですか?


Answers

perfmon、タスクマネージャ、またはそのようなツールを使用してメモリリークを判断しないでください。 彼らは傾向を特定するのには適しているが、他にはそれほど多くはない。 絶対的な言葉で報告する数字はあまりにも漠然としていて集計されているため、メモリリーク検出などの特定のタスクに役立ちます。

この質問への前回の返答は、さまざまな種類が何であるかを詳しく説明しています。

あなたはツールの推奨について尋ねる:私はメモリバリデータをお勧めします。 数十億のメモリ割り当てを行うアプリケーションの監視が可能です。

http://www.softwareverify.com/cpp/memory/index.html

免責事項:私はMemory Validatorを設計しました。

Question

perfmon windowsユーティリティを使用してプロセス内のメモリリークをデバッグしようとしています。

これはperfmonが以下の用語を説明する方法です。

ワーキングセットは、このプロセスのワーキングセットの現在のサイズ(バイト単位)です。 ワーキングセットは、プロセス中のスレッドによって最近触れられたメモリページのセットです。 コンピュータの空きメモリがしきい値を超えている場合、ページは使用されていなくてもプロセスのワーキングセットに残ります。 空きメモリがしきい値を下回ると、ワーキングセットからページが切り取られます。 必要な場合は、メインメモリを離れる前に、ワーキングセットにソフトフォールトされます。

仮想バイトは、プロセスが使用している仮想アドレス空間の現在のサイズ(バイト単位)です。 仮想アドレス空間の使用は、ディスクまたはメインメモリページの対応する使用を必ずしも意味しない。 仮想空間は有限であり、そのプロセスはライブラリをロードする能力を制限する可能性があります。

Private Bytesは、他のプロセスと共有できない、このプロセスが割り当てたメモリの現在のサイズ(バイト単位)です。

これらは私が持っている質問です:

それはプライベートバイトなのですか?プロセスが漏洩しているかどうかを確かめるために測定する必要があります。なぜなら、起こった場合には、プロセス自体から漏れが発生するからです。

プロセスによって消費された合計メモリはいくらですか? それはVirtual Bytesですか、それともVirtual BytesとWorking Setの合計ですか?

プライベートバイト、ワーキングセット、バーチャルバイトの間には何らかの関係がありますか?

メモリ使用量のより良いアイデアを提供する他のツールはありますか?




perfmonカウンタの定義は最初から壊れており、なんらかの理由で修正するのが難しいようです。

MSDNの「 Mysteries of Memory Management Revealed 」ビデオでは、Windowsメモリ管理の概要を紹介しています。メモリリークを追跡するために必要なトピック(作業セット管理など)を扱っていますが、関連するトピックで詳しく説明しています。

perfmonカウンタの説明に問題があるかどうかを知るために、MSDNの " Private Bytes Performance Counter - Beware! "のプライベートバイトについての記事を以下に示します。

Q:プライベートバイトはいつプライベートバイトではありませんか?

A:居住者でないとき。

Private Bytesカウンタは、プロセスのコミット料金を報告します。 つまり、スワップファイルに割り当てられた領域が、スワップアウトされた場合にプライベートメモリの内容を保持するための量です。 注:コミットされていない予約済み状態の仮想メモリとの混乱の可能性があるため、「予約済み」という単語は避けています。

MSDNの「 パフォーマンス計画 」から:

3.3プライベートバイト

3.3.1記述

プライベートメモリは、他のプロセスと共有できないプロセスに割り当てられたメモリとして定義されます。 このメモリは、複数のそのようなプロセスがマシン上で実行されるとき、共有メモリよりも高価です。 (従来の)管理されていないdllでのプライベートメモリは、通常、C ++の静的な構造を構成し、dllの全作業セットの5%程度です。




Related