【问题标题】:What does maximum resident set size mean?最大驻留集大小是什么意思?
【发布时间】:2020-07-01 21:16:30
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
  int i = 0;
  struct rusage r_usage;
  while (++i <= 10) {
    void *m = malloc(20*1024*1024);
    memset(m,0,20*1024*1024);
    getrusage(RUSAGE_SELF,&r_usage);
    printf("Memory usage = %ld\n",r_usage.ru_maxrss);
    sleep (3);
  }
  printf("\nAllocated memory, sleeping ten seconds after which we will check again...\n\n");
  sleep (10);
  getrusage(RUSAGE_SELF,&r_usage);
  printf("Memory usage = %ld\n",r_usage.ru_maxrss);


  return 0;
}

以上代码使用了rusage结构的ru_maxrss属性。它给出了最大驻留集大小的值。这是什么意思?每次执行程序时,它都会给出不同的值。那么请解释一下这段代码的输出?

这些是给出不同输出的相同代码的两次执行的屏幕截图,如何解释这些数字或从这两个输出中可以解释什么?

【问题讨论】:

  • 同时使用man getrusage开始挖掘
  • 对于初学者,你知道resident set size 是什么意思吗? “最大值”是指 RSS 在进程生命周期中的最大值。

标签: linux system-calls


【解决方案1】:

Resident set size (RSS) 大致表示在给定时间点分配给进程的物理内存总量。它不计算已换出的页面,或从文件映射但当前未加载到物理内存中的页面。

“最大RSS”是指自进程诞生以来RSS的最大值,即它曾经的最大值。所以这个数字告诉你你的进程在任何时候使用的最大物理内存量。

例如,如果操作系统决定在不同时间换出不同数量的程序内存,则它可能会因运行而异。这个决定将部分取决于系统的其余部分在做什么,以及在哪里还需要物理内存。

【讨论】:

  • 分配的物理内存是否必须总是大于手动分配的内存?在此示例中,我们在每次迭代中手动分配 204800 kB,但分配的物理内存的增加量与此数量不同?物理内存总是更大吗?
  • 您能否为输出中的数字提供一些上下文,以便更好地解释 maxrss。
  • @codeczar:不一定。考虑一个极端的情况,操作系统可能会在memset 完成写入之后立即换出分配的每一页,并且在您开始编写下一个之前。因此,如果操作系统换出属于您的进程的一些其他内存,物理内存使用量可能只会非常轻微地增加,甚至根本不会增加。
  • @codeczar:我不知道你所说的“上下文”是什么意思。 Memory usage = 42288 这行仅仅意味着到那个时间点为止,在任何时候分配给你的进程的最大物理内存量是 42288 KB。
  • 我想我已经用我知道的最好的方式解释了它。如果它没有足够的帮助,我很抱歉。
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多