/proc/[pid]/statm
からデータを解析して、特定のプロセスのメモリ使用量に関する手がかりを取得します。 man proc
は、常駐セットサイズ( 'ページ'で測定)は/proc/[pid]/status
のVmRSS(KB ??)と同じであると述べています。値が違うので、これらの値の関係を理解したいと思います。 /proc
のどこかで読むことができる因子のようなものはありますか(私はVmPTEについて考えましたが、それ以外は...)?特定のプロセスで使用されているメモリのサイズを取得するには、両方のどちらを解析する必要がありますか?
#ex 1782 = firefox
~$ cat /proc/1782/statm
224621 46703 9317 11 0 98637 0
# \--- resident set size
~$ cat /proc/1782/status | grep Vm
VmPeak: 935584 kB
VmSize: 898484 kB
VmLck: 0 kB
VmHWM: 257608 kB
VmRSS: 186812 kB
VmData: 394328 kB
VmStk: 220 kB
VmExe: 44 kB
VmLib: 61544 kB
VmPTE: 1224 kB
VmSwap: 0 kB
私の理解では、VMは仮想メモリの量であり、RSSはその量がメモリに常駐していることです。したがって、
仮想メモリ=物理メモリの一部+ディスクの一部
物理メモリの一部はRSSです。したがって、VSSはRSSよりも大きくする必要があります。それらがほぼ等しい場合、それはあなたのプロセスがメモリに快適に座っていることを意味します。 VSSがはるかに大きい場合は、十分なメモリがなく、その一部をディスクにスワップアウトする必要があることを意味します(つまり、競合するプロセスなどのため)。
私のシステムでは、「man proc」を実行でき、次のように表示されます。
* VmPeak: Peak virtual memory size.
* VmSize: Virtual memory size.
* VmLck: Locked memory size (see mlock(3)).
* VmHWM: Peak resident set size ("high water mark").
* VmRSS: Resident set size.
* VmData, VmStk, VmExe: Size of data, stack, and text segments.
ピークメモリ使用量を報告する場合は、VmPeakのような仮想メモリが必要になる可能性があります。
お役に立てれば!
/proc/<pid>/stat
のRSS値はページ数ですが、/proc/<pid>/status
のVmRSS値はkB単位です。
あなたの場合、46703 * 4kB(ページサイズ)= 186812kBです。
proc
のマニュアルページはstatm
コンテキストで次のように述べています
_/proc/[pid]/statm
Provides information about memory usage, measured in pages. The columns are:
size (1) total program size
(same as VmSize in /proc/[pid]/status)
resident (2) resident set size
(same as VmRSS in /proc/[pid]/status)
share (3) shared pages (i.e., backed by a file)
text (4) text (code)
lib (5) library (unused in Linux 2.6)
data (6) data + stack
dt (7) dirty pages (unused in Linux 2.6)
_
しかし、それが述べていないのは、size
とresident
がページ数で表されているということです。
_~$ cat /proc/1782/statm
224621 46703 9317 11 0 98637 0
# \--- resident set size
_
したがって、_46703
_はページ数で表される常駐セットサイズであり、_224621
_もページ数で表される仮想メモリサイズです。
KBで取得するには、ページサイズを掛けます。 _getconf PAGESIZE
_コマンドまたは_C/C++
_プログラムでsysconf(_SC_PAGE_SIZE)
(unistd.hで定義)を呼び出すことにより、ページサイズを取得できます。これにより、ページサイズがバイト単位で表示されます。 1024で除算して、KB単位のページサイズを取得します。
例:
_$getconf PAGESIZE
4096
_
4096/1024 = 4 KB
したがって、KB単位の常駐セットサイズは46703 x 4 = 186812 kB(VmRSS)です。
KB単位の合計プログラムサイズは224621x 4 = 898484 kB(VmSize)