Единица максимального размера резидентного набора в выводе времени
Может кто-нибудь дать мне знать, какова единица измерения максимального резидентного размера в выходных данных ниже?
/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)
2 ответа
Это зависит от операционной системы. В OS X это измеряется в байтах. Вот что об этом говорит man-страница:
-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
Выделение одного дополнительного мегабайта памяти выделяет еще 999424 единицы памяти. Есть некоторая неточность измерений, но это показывает, что используемая единица измерения — байты.
Я уже говорил, что это зависит от ОС. В Linux,ru_maxrss
измеряется в кибибайтах. Будьте осторожны при написании кроссплатформенного кода, который от этого зависит.
Это в байтах. Так что в этом случае 3671834624 равняется 3,6 ГБ.