Linuxではメモリ使用量はどのように報告されますか?


17

psを使用すると、サイズ、vsize(topのVIRTと同じ?)、rss(topのRESと同じ?)を確認できます。(一番上にあるもう1つはSHRです。)

これらのさまざまなフィールドの意味を誰かが要約してくれますか?


このページが参照として表示されるように、リンクが消えるよりも、このページに良い要約が表示されます。
ジムハンジカー

回答:


34

要するに:

  • 仮想サイズ:プロセスが管理しているアドレス空間の量です。仮想アドレススペースには、プロセスがポインター(メモリアドレス参照)を介してアクセスできるすべてのものが含まれています。たとえば、プログラムがビデオカードのフレームバッファにアクセスする場合、そのメモリはプロセス仮想空間にマップされ、ポインターに格納されているアドレスを受け取ります。メモリマップファイルと匿名マッピングも、仮想アドレススペースのサイズに含まれます。ほとんどすべてが仮想サイズです。にリストされているすべてのアドレス範囲のサイズを合計する/proc/<pid>/mapsと、仮想サイズとほぼ同じ値が返されます。

  • 常駐サイズ:現在メモリに常駐しているプロセスに特に属するメモリの量です。つまり、スワップされていないメモリの量。プロセスが実行されている場合でも、プロセスの一部がスワップメモリ​​内にあることに注意してください。プロセスがアクセスしようとすると、オペレーティングシステムはスワップからこれらの領域を取得します。これには、ヒープ、すべてのスレッドのスタック、および他のプライベートマッピングが含まれている必要があります。あなたが見れば/proc/<pid>/maps[stack][heap]および他の匿名のマッピング(ファイルパスのないもの)のいずれかスワップか常駐サイズに計上されています。

  • 共有サイズ:複数のプロセスに属する可能性のあるメモリの量です。たとえば、同じアプリケーションの4つのインスタンスがメモリにロードされている場合、ヒープの4つのインスタンスと少なくとも4つのスタックがあり、各プロセスに1つ(これは常駐メモリです)がありますが、プログラムとそのライブラリのバイナリコード。これは共有スペースです。プログラムバイナリコードとそのライブラリだけでなく、ローカライズファイル、読み取り専用プログラムデータ、SysVおよびPOSIX共有メモリセグメント、セマフォなども含まれています。見てみると/proc/<pid>/maps、ライブラリとプログラムファイルに関連付けられているほとんどのマッピングは共有しました。

VIRTにはRSSとSHRの結合が含まれており、常にこれらのいずれよりも大きいことに注意してください。RSSとSHRの両方として説明される地域が存在する場合があります。


2
ちなみに、最近のバージョンのLinuxでは、/ proc / <pid> / smaps
bdonlan 2009

1
共有サイズはメモリであることができる共有されます。アプリケーションがライブラリの唯一のユーザーである場合、ライブラリは単一のプロセスによってメモリに保持されます。このようにして、共有メモリでさえ「プロセス所有」メモリにすることができます。
ヒューバートカリオ

6

ジュリアーノの答え:

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。


ええ、それは他の2つよりもVIRTについての声明でした。私が念頭に置いていたのは、その合計よりもRSSとSHRの結合に関するものでした。つまり、VIRTにはRSSとSHRの両方が含まれています。不十分な数学的表現。
ジュリアーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.