时间输出中最大驻留集大小的单位

时间输出中最大驻留集大小的单位

有人能告诉我下面输出中最大居民规模的单位是什么吗?-

/usr/bin/time -l mvn clean package -T 7 -DskipTests
...
real       530.51
user       837.49
sys         64.28
3671834624  maximum resident set size
         0  average shared memory size
         0  average unshared data size
         0  average unshared stack size
   2113909  page reclaims
     26733  page faults
         0  swaps
      5647  block input operations
     26980  block output operations
        15  messages sent
        25  messages received
       687  signals received
    406533  voluntary context switches
   1319461  involuntary context switches

我正在尝试测量某个进程的峰值内存使用量。

环境 - Mac OS X Sierra(10.12.5)

答案1

这取决于操作系统。在 OS X 上,单位是字节。以下是手册页对此的说明:

     -l      The contents of the rusage structure are printed as well.

现在,要弄清楚这意味着什么,请运行man getrusage 2。它说的是:

     ru_maxrss    the maximum resident set size utilized (in bytes).

因此手册页说这是以字节为单位的。

为了仔细检查文档,我用 C 编写了一个测试程序。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char **argv) {
    int mb = atoi(argv[1]);
    printf("allocating %d MB", mb);
    int len = mb * 1000 * 1000;
    char *buf = malloc(len);
    memset(buf, 'X', len);
    return 0;
}

这将读取命令行参数并分配相应数量的兆字节。以下是程序的运行情况:

$ /usr/bin/time -l ./test 1 2>&1 |  grep max   
             1744896  maximum resident set size
$ /usr/bin/time -l ./test 2 2>&1 |  grep max
             2744320  maximum resident set size

分配 1 兆字节额外内存将分配 999424 个额外内存单位。测量有些不准确,但这表明使用的单位是字节。

我之前说过,这取决于操作系统。在 Linux 上,ru_maxrss单位是千字节。编写依赖于此的跨平台代码时要小心。

答案2

以字节为单位。因此,在本例中,3671834624 等于 3.6 GB。

相关内容