3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

メモリ使用量の調査。用語メモ書き…

現在開発中のアプリをパフォーマンスをチェックするため、Windows付属のパフォーマンスログを使いチェックしてみました。

瞬間的なメモリ使用量はタスクマネージャでもみれます。

特にWindowsXPのタスクマネージャは表記がかなり不親切です。

まずデフォルトで出てくる「メモリ使用量」。

これはプロセスのワーキングセットを表しています。(ワーキングセットについては後述)

(パフォーマンスカウンタの Process/Working Setと同じ)

そして、「列の選択」で表示を追加できる「仮想メモリサイズ」。

これはプロセスによってコミットされたサイズ、つまりプライベートバイトを表しています。

(パフォーマンスカウンタの Process/Private Bytesと同じ)

参考:(MSDN)CLR徹底解剖 メモリの問題を調べる。

ちなみにVistaではタスクマネージャのデフォルト表示項目が変わっています。

「メモリ(プライベートワーキングセット)」となっています。

これは共有DLLなどが使用するメモリーを除いた、プロセス本体が使用するメモリー量(つまりワーキングセットから共有オブジェクト等を引いたもの)だそうです。

参考:タスクマネージャに表示されるメモリ使用量

また、XP時代にタスクマネージャで「仮想メモリ」表示されていた項目はVistaでは「コミットサイズ」になっているようです。(プライベートバイト)

参考:Vista で "private bytes" の意味って本当に変わったの?

Vista表記になれるまで時間かかりそう。。

さて、作成アプリのパフォーマンス計測時にメモリ関連項目に注意してみるべき点ですが、パフォーマンスカウンタには非常に多くのカウンタがあり、わけがわからなくなってしまいます。おもに重要だと思われる項目だけあげてみました。

■Process

Private Bytes

実際にプロセスが必要しており、他のプロセスと共有できないサイズです。そのプロセスがどれくらいメモリを消費するのかの一番の目屋です。なお、この項目はハードディスクにスワップされているページや物理メモリ上の領域を問いません。(つまり物理メモリで使用中+HDDスワップ中ということになります)

なお、XPのタスクマネージャでは「仮想メモリサイズ」と表現されています。

Working Set

そのプロセスで使用しているメモリサイズ(仮想メモリ含む)のうち実際のメモリ上で確保されている領域です。メモリに余裕がある場合(正確には空きメモリ領域のしきい値)は、使用中でなくても実メモリ上に残る仕様見たいです。(キャッシュ的な感じ?)

Working Set -Private-(Vistaのみ)

上記にて説明済みですが、ワーキングセット - 共有オブジェクト の値となります。実メモリ上のそのプロセスonlyな確保している空間です。

Vistaのタスクマネージャのデフォルトです。

Page Faults/sec

プロセッサがページフォルトを処理する全体の割合を表し、その値は秒あたりに発生するページフォルト数で測定します。

この値はハードページフォルト(ディスクアクセスを伴うもの)と、ソフトページフォルト(ページフォルトが物理メモリの他の場所に検出される) の両方を含むようです。

HDD上のページファイルに対して、スラッシングしているかどうかの正確な値はこのカウンタがソフトページフォルトを含んでいることから難しいかもしれません。HDD上ページファイルへのページングを見るには Memory¥Pages/sec を見たほうがよさそうです。(ただこれだと、そのプロセスに対してというのが見れませんが。)

■Memory

Available Mbytes

物理メモリの空きサイズです。

これが足りないとスラッシングになってしまい、激しくパフォーマンスが低下します。

Pages/sec

MSからのコピペになりますが。。

ハード ページフォルトを解決するためにディスクとの間で読み書きされるページの数を表します (ハードページフォルトは、プロセスにおいて必要なコードまたはデータが作業セットまたは物理メモリの他の場所にも存在せず、ディスクから取得しなければならないときに発生します)。

その値は、Memory: Pages Input/sec と Memory: Pages Output/sec との合計です。

Commited Bytes

システム全体で利用されているメモリの使用量(HDD上のページファイル含む)です。

これが物理メモリより大きくなればなるほどページングが頻繁に発生します。

以上最低限見ておきたい項目をまとめてみました。

メモリ管理、結構手間ですね。

NyaRuRuさんのブログには非常に細かい情報が載っているので大助かりです。

参考:NyaRuRuのメモリがらみが多く書いてる月

MS:パフォーマンスカウンタについて

OS統計情報の取得(Windows以外のOSについても載ってます)

OS小論:OSの構造をもう少し考えてみる(15)(かなり濃い内容です。時間あるときに。。)

パフォーマンスモニタの監視項目(パフォーマンス低下を見極める値も載っているので助かります)