linux statm和top测量的内存差异

rkue9o1l  于 5个月前  发布在  Linux
关注(0)|答案(1)|浏览(72)

top报告的我的程序所使用的内存量是/proc/[pid]/statm报告的内存量的两倍多。如何解释这种差异?

66bbxpm5

66bbxpm51#

从“男人”页面:
https://man7.org/linux/man-pages/man5/proc.5.html

/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
                   (inaccurate; same as VmRSS in /proc/[pid]/status)
        shared     (3) number of resident shared pages
                   (i.e., backed by a file)
                   (inaccurate; same as RssFile+RssShmem in
                   /proc/[pid]/status)
        text       (4) text (code)
        lib        (5) library (unused since Linux 2.6; always 0)
        data       (6) data + stack
        dt         (7) dirty pages (unused since Linux 2.6; always 0)

Some of these values are inaccurate because of a kernel-
internal scalability optimization.  If accurate values are
required, use /proc/[pid]/smaps or
/proc/[pid]/smaps_rollup instead, which are much slower
but provide accurate, detailed information.

字符串
另外:VMsize 是进程正在使用的“地址空间”:用途:可用地址的数量。这些地址不需要附加任何物理内存。附加的物理内存是RSS数字。
问:那么你对哪些具体的价值观有疑问?
请看我下面的评论,请参考这些链接:

简短的回答:

  • RES in top(RSS is ps),这是Map到物理内存页的内存总和。
  • VMsize 是进程用途:可用地址的数量。
  • “VMSize”地址不(必须)有任何物理内存附加到它们。
  • 附加的物理内存(“常驻内存”)是RSS图。

从top、/proc/nnn/stat和ps查看实际值也会很有帮助。
这里有一篇很棒的文章(许多文章之一):
Process Memory Management in Linux - Baeldung.com

*VSZ内存

VSZ是虚拟内存大小的缩写。它是一个进程可以假设访问的内存总量。
它说明了二进制文件本身的大小、任何链接库以及任何堆栈或堆分配。
当一个进程启动时,VSZ内存变成RSS内存。

*RSS内存

与VSZ相反,RSS(也是Resident Set Size的缩写)是一种度量,它显示了在进程执行期间分配给该进程的RAM数量
但是,它实际上并不是一个进程的RAM使用率的准确度量,因为它没有考虑已经加载到内存中的库。
因为RSS显示了整个内存输出,即使是已经预加载的信息,如果我们把进程列表中的所有内容加起来,我们得到的内存将超过分配的总内存。

相关问题