WindowsとLinuxのメモリ

本ページではWindowsとLinuxについてのプロセスメモリの見方について記載します。

Windowsのメモリの見方

Windows OS上のプロセスが確保したメモリは用途やスコープに応じて以下のような種類に分けられています。

Virtual Bytes(バーチャルバイツ)
該当プロセスの仮想アドレス空間に割り当てられている領域の全合計をVirtual Bytesと呼びます。 Virtual Bytesはパフォーマンスモニタから process オブジェクトのカウンタとして確認することができます。 Virtual Bytesの値のみでは該当プロセスにおいて物理メモリがどの程度割り当てられているかは一切わかりません。 また、全プロセスのVirtual Bytesの合計値はOSとして認識している物理メモリとスワップ領域の合計値を超えることはできず、 32bit OS上ではデフォルトの設定では1プロセスあたりのVirtual Bytesは2GBを超えることはできません。超えようとした場合メモリが割り当てができずエラーが発生します。

Private Bytes(プライベートバイツ)
Virtual Bytesのうち、ほかのプロセスから共有されない領域をPrivate Bytesと呼びます。 Private Bytesはタスクマネージャで表示される「仮想メモリ サイズ」の値(~XP)や「コミット サイズ」の値(Vista~)、パフォーマンスモニタの process オブジェクトのカウンタとして確認することができます。 プログラムが利用するデータ等は主にこの中に含まれていますが、Virtual Bytesの中でもメモリマップされたファイル領域や、実行可能ファイル(.exe)とライブラリ(.dll、.lib)がロードされたイメージ領域の一部等は Private Bytes に含まれないためプログラムによってはPrivate BytesよりもWorking Setの値のほうが大きくなる場合もあります。

Working Set(ワーキングセット)
Virtual Bytesのうち、物理メモリに割り当てられている領域をWorking Setと呼びます。 Working SetはXPまでのタスクマネージャでは「メモリ使用量」として表示され、Vista以降では「Working set」として表示されます。 また、パフォーマンスモニタの process オブジェクトのカウンタとしても確認することができます。 なお、Working Setはその他プロセスから共有されないPrivate Working Setと共有可能なSharable Working Setの合計であり、 Windows Vista以降のタスクマネージャにおいてはWorking Set とPrivate Working Setをそれぞれ表示できるようになっています。

task_manager
タスクマネージャ
perfmon
パフォーマンスモニタ

Linuxのメモリの見方

Linuxでプロセス単位でメモリを確認するにはtopコマンドか、psコマンドで確認する方法が簡単です。

top
VIRT・・・仮想アドレス空間に割り当てられた領域
RES・・・物理メモリに割り当てられた領域
SHR・・・他のプロセスからも共有されている可能性がある領域
Tasks: 115 total,   1 running, 114 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2041652k total,  1975180k used,    66472k free,   283688k buffers
Swap:  2031608k total,    34644k used,  1996964k free,  1481516k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3091 tomcat    20   0  284m  44m  14m S  0.3  2.2  10:09.82 java
    1 root      20   0  2040  648  556 S  0.0  0.0   0:10.66 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
ps aux
VSZ・・・仮想アドレス空間に割り当てられた領域
RSS・・・物理メモリに割り当てられた領域
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2040   648 ?        Ss   Mar19   0:10 init [3]
★ORACLE案件承ります