我解析数据/proc/[pid]/statm
以获得关于某个进程的内存使用情况的线索.man proc
说明驻留集大小(以"页面"衡量)与VmRSS(KB ??)相同/proc/[pid]/status
.由于它们具有不同的值,我想了解这些值之间的联系.是否有某种因素我可以在某处阅读/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
Run Code Online (Sandbox Code Playgroud)
Tak*_*uma 31
RSS值/proc/<pid>/stat
是页数,而VmRSS值/proc/<pid>/status
是以kB为单位.
在您的情况下,46703*4kB(页面大小)= 186812 kB.
Ray*_*Ray 15
我的理解是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.
Run Code Online (Sandbox Code Playgroud)
如果要报告峰值内存使用情况,那么您可能需要虚拟内存,它看起来像VmPeak.
希望这可以帮助!
Dr.*_*nce 10
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)
Run Code Online (Sandbox Code Playgroud)
但它未能说明的是,size
并resident
以页数表示.
~$ cat /proc/1782/statm
224621 46703 9317 11 0 98637 0
# \--- resident set size
Run Code Online (Sandbox Code Playgroud)
因此,46703
驻留集大小以页数表示,并且224621
也是以页数 表示的虚拟内存大小.
现在以KB为单位将它们与页面大小相乘.您可以通过调用getconf PAGESIZE
或在C/C++
程序中通过调用sysconf(_SC_PAGE_SIZE)
(在unistd.h中定义)获取页面大小.这将为您提供以字节为单位的页面大小.将其除以1024以获得以KB为单位的页面大小.
示例:
$getconf PAGESIZE
4096
Run Code Online (Sandbox Code Playgroud)
4096/1024 = 4 KB
因此,以KB为单位的驻留集大小为46703 x 4 = 186812 kB(VmRSS).
总程序大小(KB)为224621 x 4 = 898484 kB(VmSize)
归档时间: |
|
查看次数: |
30273 次 |
最近记录: |