パフォーマンスモニタのメモリについて

このQ&Aのポイント
  • パフォーマンスモニタのメモリについて理解しましょう。Private BytesとWorking Setについて認識を確認します。
  • Private Bytesは他のプロセスと共有されない仮想メモリのサイズ、Working Setはプロセスが使用している物理メモリのサイズです。
  • Working Setは他のプロセスと共有されず、Private BytesとWorking Setを足した値がプロセスが使用しているメモリの合計です。
回答を見る
  • ベストアンサー

パフォーマンスモニタのメモリについて

1.パフォーマンスモニタであるPrivate Bytes、Working Setがいまいち理解できませんが、下記の認識であっておりますでしょうか。 (1) 仮想メモリ 物理メモリが不足したときに使用するハードディスク上に設定した仮想メモリ(ページングファイル) (2) Private Bytes : ほかのプロセスから共有されない仮想メモリサイズ (3) Working Set : プロセスが使用している物理メモリサイズ 2.認識があっている場合、Working Setは、他のプロセスと共有されていますでしょうか。 Working Setがほかのプロセス共有されていないとのことでしたら、Private Bytesと Working Setを足した値がそのプロセスが使用しているメモリの合計ということでしょうか。

noname#242248
noname#242248

質問者が選んだベストアンサー

  • ベストアンサー
  • foitec
  • ベストアンサー率43% (1079/2453)
回答No.1

まず前提 該当プロセスの仮想アドレス空間に割り当てられている領域の全合計をVirtual Bytesと呼びます。 Virtual Bytesの値のみでは該当プロセスにおいて物理メモリがどの程度割り当てられているかは一切わかりません。 また、全プロセスのVirtual Bytesの合計値はOSとして認識している物理メモリとスワップ領域の合計値を超えることはできず、 32bit OS上ではデフォルトの設定では1プロセスあたりのVirtual Bytesは2GBを超えることはできません。 Virtual Bytesのうち、ほかのプロセスから共有されない領域をPrivate Bytesと呼びます。 Private Bytes :  タスクマネージャで表示される「仮想メモリ サイズ」の値(XP以前の場合)や 「コミット サイズ」の値(Vista以降の場合)、パフォーマンスモニタの process オブジェクトのカウンタとして確認することができます。 プログラムが利用するデータ等は主にこの中に含まれていますが、Virtual Bytesの中でもメモリマップされたファイル領域や、 実行可能ファイル(.exe)とライブラリ(.dll、.lib)がロードされたイメージ領域の一部等は Private Bytes に含まれないため プログラムによってはPrivate BytesよりもWorking Setの値のほうが大きくなる場合もあります。 Private Bytes : Virtual Bytesのうち、物理メモリに割り当てられている領域のことで 実際にプロセスが必要しており、他のプロセスと共有できないサイズ。 ハードディスクにスワップされているページや物理メモリ上の領域を問わない。 (物理メモリで使用分+HDDスワップ分) Working Set : Virtual Bytesのうち、物理メモリに割り当てられている領域のこと。 そのプロセスで使用しているメモリサイズ(仮想メモリ含む)のうち 実際のメモリ上で確保されている領域 Working Setはその他プロセスから共有されないPrivate Working Setと 共有可能なSharable Working Setの合計のことを言います。 Working Set = Private Working Set + Sharable Working Set >Private Bytesと Working Setを足した値がそのプロセスが使用しているメモリの合計ということでしょうか。 その計算は成り立たないことがお分かりい頂けると思います。

noname#242248
質問者

お礼

もう一度、整理していたら理解することができました。 1.Private Bytes・・・他のプロセスとは共有されないメモリ領域。物理メモリ、ページファイルを問わないため、物理メモリ+HDDスワップ領域となる。 2.Working Set・・・・そのプロセスに割り当てられた物理メモリ領域。Private Working Set(他のプロセスとは共有されない物理メモリ)+ Sharable Working Set(他のプロセスと共有される物理メモリ)を足した値が、Working Setとなる。

noname#242248
質問者

補足

ありがとうございます。 「Process Explorer を使う。」サイトで「Private Bytes … プロセスが占有している仮想メモリ量」、「仮想メモリ量 = 物理メモリ量 + ディスクスワップ量」という 記載があり、「仮想メモリの容量をスペックに合わせて変更する 」サイトでは、「仮想メモリは、ハードディスク上に記録されるメモリで、物理メモリの補助的な役割を担い、 「ページングファイル」とも呼ばれています。」という記載があります。 そのため、仮想メモリはハードディスクに搭載されるメモリのため、実際に物理メモリではないと解釈するのですが、「仮想メモリ量 = 物理メモリ量 + ディスクスワップ量」 もあるため、両方を合わせて理解しようとすると、説明に矛盾がでるため、理解ができず、Private Bytes、Working Setの区別ができずにおります。 また、仮想アドレス空間とは仮想メモリにしようするため、物理メモリに関係あるのでしょうか。物理メモリの場合、実アドレス空間ということではないでしょうか。 アドレス空間の理解ができていないため、この点が理解を難しくしている要因と思っております。 -------------------------------------------------------- Process Explorer を使う。 http://rms-099.hatenablog.jp/entry/20120503/1367560923 --------------------------------------------------------- -------------------------------------------------------- 仮想メモリの容量をスペックに合わせて変更する http://jisaku-pc.net/speed/set_04.html --------------------------------------------------------

関連するQ&A

  • 特定のプロセスが使用している物理メモリ量

    特定のプロセスが使用している物理メモリを確認する方法を教えてください。 プロセスが使用している物理メモリ領域は「Working Set」と呼びますが、「Working Set」には「Private Bytes」と「Shared Bytes」が含まれます。 「Shared Bytes」は、他のプロセスと共有される物理メモリのため、特定のプロセス専用で使用される物理メモリではありません。 「Private Bytes」は、そのプロセスが物理メモリで利用中のものとページアウトされたものになり、ページアウトされたものは物理メモリにはありません。 「Working Set」は「Private Bytes」+「Shared Bytes」の総和といっても、ページアウトされたものをは物理メモリにないため、ページアウトされたものは引かれています。 「Working Set」の値から「Shared Bytes」の使用量を調べて、「Shared Bytes」の中で特定のプロセス専用のものでないものを引くことができれば、特定のプロセスが使用している純粋な物理メモリを知ることができるのではと考えております。 パフォーマンスモニターなどのツールでどの「カウンタ」のどの「インスタンス」を取得して、どのような計算をすれば、求めることができるかご教示頂けませんでしょうか。

  • パフォーマンスモニターのメモリ使用量測定について

    Windows Server 2003のパフォーマンスモニターについてお聞きしたいことがあります。 ■質問 パフォーマンスモニターの以下の2項目は、 一方が増加すれば一方が減少するという相関を持たないのでしょうか? ・memory/available bytes(利用可能な物理メモリの容量) ・process/working set(プロセスが使用している物理メモリ量) ■質問の背景 サーバーに対しあるリクエストをした際に、memory/available bytes(利用可能な物理メモリの容量)が一時的に1.5GB程度減少しますが、process/working set(プロセスが使用している物理メモリ量)が増加しません。 利用可能なメモリが減少したということは、その分何らかのプロセスがメモリを消費していると考えますが、パフォーマンスモニターの結果がそのような傾向を示さなかったため、質問させて頂きました。

  • プロセスと仮想メモリについて

    プロセスと仮想メモリについて こんばんは。 プロセスについて勉強しています。 その過程で、「プロセスは物理メモリーとは切り離された仮想メモリーにアクセスする。 仮想メモリーはひとつのプロセスに対して4Gバイト割り当てられる。」 とありました。 今まで仮想メモリーと言うのは、ページングファイル(物理メモリの代わりに使用される ハードディスクの領域)のことだと思っていましたが、この仮想メモリーと、プロセスを 語る上での仮想メモリーとは別物なのでしょうか? 宜しくお願いいたします。

  • PF使用量が5GB、ProcessExplorer

    先日タスクマネージャを確認したところ、別添画像のようにPF使用量が5GB近くになっていました。 以前に確認したときは多くても1GB前後だったと思います。 再起動しても変わらず、試しにタスクトレイの常駐ソフトを全て終了させても4GB程度までしか下がりません。 ここの過去ログを参考に、ProcessExplorerというソフトでメモリを占有しているプログラムがないか探してみたのですが 極端にメモリを食っているものは見つかりませんでした。 ただ、気になる事が・・・。 ・全プロセスのPrivate Bytesの合計:約4.7GB ・全プロセスのWorking Setの合計:約500MB ProcessExplorer(用語説明より抜粋) Private Bytes:プロセスに排他的に割り当てられたメモリのサイズ Working Set:プロセスが利用している物理メモリのサイズ 上記のようにPF使用量とPrivate Bytesの合計値がほぼ一致したのですが、 そもそも、通常PF使用量というのは、Private Bytesの合計値のことなのでしょうか? また、Private Bytes がWorking Setの10倍というのは普通なんでしょうか? 分からない事だらけで、とりとめもない質問になってしまいすみません。 根本的な質問は、どうしてPF使用量が極端に増えているの??なのですが・・・。 どなたかアドバイスおねがいいたします。 WinXP Pro SP3 CPU:Intel E6750 2.66GHz メモリ:2GB

  • Windowsの仮想メモリシステムについて

    こんにちは。 OSは現在、WindowsVistaと、Windows7を使っています。 こういったWindows系OS全てに共通している、仮想メモリなどのメモリ関係の用語について、かなり詳しく調べたのですが、最近、それらをきちんと理解できていない事に気づきましたので、今回の質問をさせて頂きます。 まず僕は、メモリ関係の各用語について、以下のように解釈しています。 ---------------------------------------------------------------------------------- ●物理メモリ 基本的にはRAM上にあるメモリの事であり、OSによってアクセスされる。 OSは起動後、各物理メモリに、物理アドレス(物理アドレス空間におけるアドレス)を割り当てる。 ●仮想メモリ領域 仮想メモリ領域は、各プロセスが、メモリを使うためにアクセスするアドレス空間の事であり、物理メモリと、次で説明するページファイルで構成されてる。 現在のWindows系OSでは、プロセスが起動すると、そのプロセスとセットになる、4GBの仮想メモリ領域 (仮想アドレス空間とも呼ばれる) が割り当てられ、実行するプログラムコードと、そのコードが参照して操作するデータが、そこにマップされる。 プロセスの持つ仮想メモリ空間4Gバイトの内、ユーザが使用可能なメモリ領域は、下位2Gバイトであり、上位2Gバイトはシステムによって使用される、「カーネルメモリ」となる。 OSと、コンピュータ上の専用のハードウェアコンポーネントは、プロセスが使用している仮想アドレスを、物理アドレスに変換する処理を行っている。 Windowsの場合、仮想メモリの各フラグメントを、「ページ」といい、サイズは通常 4KB である。 ●ページファイル 物理メモリの不足を補うために、HDDに用意されたメモリ領域の事である。 デフォルトではC:\pagefile.sys というファイルが、ページファイルとなっている。 これによって、RAM容量よりも大きなサイズの、仮想メモリ空間を利用することができる。 ページファイル上に置かれたページにアクセスするには、そのページをRAM上に読み込まなければならないため、現在使われていないRAM上のページとの入れ替えが、OSによって行われる。 このとき、RAM上の不要なページをページファイルに書き出し、RAMから消去することを「ページアウト」あるいは「スワップアウト」と呼び、必要なページをページファイルから読み出し、RAM上に配置することを「ページイン」あるいは「スワップイン」という。 ●コミットページ(コミットチャージ) プロセスに割り当てられた、使用可能な仮想メモリページ全てを表す。 これには、RAMからページアウトされたメモリページも含まれまれる。 コミットページの合計サイズと現在使用中のサイズは、タスクマネージャのパフォーマンスタブにある[ページファイル]の部分で確認できる。 この[ページファイル]という部分は、上で説明したページファイルの事ではなく、 RAMとページファイルの両方に存在している、メモリページのサイズを意味する。 ●ワーキングセットページ プロセスから最も頻繁かつ直近にアクセスされる、常にRAM上にあるメモリページの事である。 ワーキングセットページには、そのプロセスしか使えない部分(プライベートワーキングセット)と、他のプロセスと共有可能な部分がある。 共有可能なワーキングセットは、他のユーザープロセスで、物理メモリが不足し始めた場合に使用できる。 ----------------------------------------------------------------------------------- まず、以上の解釈で、おかしいと思う部分がありましたら、どしどし突っ込んで下さい。 次に、以下のようなコードブロックを含む、C++プログラムを作成して実行しました。 ------------------------------------------------------------ char *p; for(int i=1; i<=2000 ; i++) p=new char[1024*1024]; ------------------------------------------------------------ このコードブロックは、pというポインタに対し、1024×1024B = 1MB のメモリの割り当て作業を、2000回行います。 つまり、このプログラムをビルドして作成された、a.exeという実行ファイルを実行すると、 約2000MBのメモリがa.exeに割り当てられるという事が予想できます。 プログラムの実行中に、タスクマネージャのプロセスタブにある、a.exeの行を見ていると、 メモリに関する列項目値は、 コミットサイズ:2012.928KB=1965.75MB ワーキングセット:4616KB=4.51MB プライベートワーキングセット(a.exeしか使えないワーキングセット):2656KB=2.59MB となっていました。 ワーキングセットページのサイズが4.51MBとしかない事から、約2000MBのメモリの割り当ての大半は、RAM上にはないメモリページ、つまりページファイル上のメモリページを使って行われたのだと、僕は思いました。 ところが、ページファイル上のメモリページの使用量を、専用のソフトで調べてみると、 a.exeの実行前から全く変化していなかったので、実際はページファイル上のメモリページを使用しなかったのだという事になります。 では一体、どこにあるメモリページが、a.exeで使用されたのかという事になります。 この件について、皆さんはどう思われるでしょうか? 長くなりましたが以上です。 何か御存じの方がいらっしゃれば、是非、アドバイスして頂きたく思います。 では、よろしくお願い致します。

  • パフォーマンスモニタの値について

    Windows2003サーバをパフォーマンスモニタで監視しています。 カウンタ「Memory\Available MBytes」では、 値が常時700Mから800M近辺を推移しています。 ところが、別のカウンタ「Memory\Pages/Sec」を見るととある時間帯で 値が100以上に上昇していました。 (恐らくバッチの時間帯だと思います) 「Memory\Pages/Sec」の値が上昇するということは、 メモリ不足で仮想メモリにページングが発生したと思われますが、 上記の「Memory\Available MBytes」を見ると、物理メモリに 余裕はあるとも考えられます。 取り方に問題がありましたでしょうか・・?。 それともページングの発生は別の要因が考えられますでしょうか・・?。

  • 仮想メモリは要らないのですけど・・・

    WindowsXPを使っている者ですが、システムのプロパティでページングファイルを無効にしても、タスクマネージャのプロセスの所を見ると、全てのプロセスで仮想メモリが使われています。 タスクマネージャによると、コミットチャージの制限値+カーネルメモリの合計が物理メモリの合計にほぼ等しいので、それらの数値によると仮想メモリは使われていないみたいなのですが・・・。 仮想メモリを殆ど使わせないようにはできないのでしょうか。

  • システムのパフォーマンス

    システムのパフォーマンスの詳細設定で、仮想メモリを増やしています あまり増やしすぎると何か影響ありますか? 「すべてのドライブの総ページングファイルサイズ」で約1.7倍にしています C-40GB D-400GB E-250GB F-400GB です

  • 仮想メモリが0になりません

    「システムのプロパティ」→「詳細設定」→「パフォーマンス」→「詳細設定」→「仮想メモリ」でページングファイルを全てのドライブで「ページングファイルなし」に設定したのですが、メモリ掃除ソフトの「mclean」の仮想メモリの欄に696.4Mの仮想メモリが表示されています。しかも実際にそのメモリを使用しているみたいです。これはまだドライブにページングファイルが残っているということなのでしょうか?一応全ドライブを検索したのですがそれらしいファイルは見つかりませんでした。

  • ハードディスクをアクセスしているのは?

    ノートでXPを使用しています。 メモリが少ないせいか、ハードディスクのアクセスが多くなっています。多分、仮想メモリを使用しているせいなのでしょう。 で、ハードディスクを頻繁にアクセスしているときにどのソフトがハードディスクをアクセスしているのか、わかる方法はありますか。 タスクマネージャを起動していますが、ハードディスクを頻繁にアクセスしているときは、むしろCPU使用率は低くなっていて、プロセスをみてもわかりません。CPU使用率でなく、ハードディスク占有率がわかる方法、今、どのソフトがハードディスクを使っているのかわかる方法ってないでしょうか。 ちなみに、タスクマネージャのパフォーマンスで、コミットチャージの合計が、物理メモリの合計より小さければ、仮想メモリでハードディスクは使わないと認識していますが、そのときでも、異常に重たくなって、ハードディスクをすさまじくアクセスしていることがあります。 なにか、ウインドウズのプロセスが使っているのだと思うのですが。 以上、よろしくお願いいたします。