回答:
要するに:
仮想サイズ:プロセスが管理しているアドレス空間の量です。仮想アドレススペースには、プロセスがポインター(メモリアドレス参照)を介してアクセスできるすべてのものが含まれています。たとえば、プログラムがビデオカードのフレームバッファにアクセスする場合、そのメモリはプロセス仮想空間にマップされ、ポインターに格納されているアドレスを受け取ります。メモリマップファイルと匿名マッピングも、仮想アドレススペースのサイズに含まれます。ほとんどすべてが仮想サイズです。にリストされているすべてのアドレス範囲のサイズを合計する/proc/<pid>/maps
と、仮想サイズとほぼ同じ値が返されます。
常駐サイズ:現在メモリに常駐しているプロセスに特に属するメモリの量です。つまり、スワップされていないメモリの量。プロセスが実行されている場合でも、プロセスの一部がスワップメモリ内にあることに注意してください。プロセスがアクセスしようとすると、オペレーティングシステムはスワップからこれらの領域を取得します。これには、ヒープ、すべてのスレッドのスタック、および他のプライベートマッピングが含まれている必要があります。あなたが見れば/proc/<pid>/maps
、[stack]
、[heap]
および他の匿名のマッピング(ファイルパスのないもの)のいずれかスワップか常駐サイズに計上されています。
共有サイズ:複数のプロセスに属する可能性のあるメモリの量です。たとえば、同じアプリケーションの4つのインスタンスがメモリにロードされている場合、ヒープの4つのインスタンスと少なくとも4つのスタックがあり、各プロセスに1つ(これは常駐メモリです)がありますが、プログラムとそのライブラリのバイナリコード。これは共有スペースです。プログラムバイナリコードとそのライブラリだけでなく、ローカライズファイル、読み取り専用プログラムデータ、SysVおよびPOSIX共有メモリセグメント、セマフォなども含まれています。見てみると/proc/<pid>/maps
、ライブラリとプログラムファイルに関連付けられているほとんどのマッピングは共有しました。
VIRTにはRSSとSHRの結合が含まれており、常にこれらのいずれよりも大きいことに注意してください。RSSとSHRの両方として説明される地域が存在する場合があります。
ジュリアーノの答え:
RSS + SHR <= VIRT、常に注意してください。
これは間違っています。SHRには、他のプロセスと共有できるすべての仮想メモリが含まれ、RSSには、プロセスで使用されるRAMに物理的にすべてのメモリが含まれます。
したがって、現在RAMにあるすべての共有メモリはSHRとRSSの両方でカウントされます。したがって、SHR + RSSは重複カウントを含むことができるため、意味がありません。
RSS + SHR> VIRTでプロセスを構築するには、大きなファイル(1GB)をmmapし、それを完全に読み取ります:mmapされたファイルはRAMにロードされ、VIRT、SHRおよびRSSはそれぞれ1GBをわずかに超えるため、SHR + RSS> VIRT。