有人能告诉我下面输出中最大居民规模的单位是什么吗?-
/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。