다양한 다른 스크립트를 호출하는 bash 스크립트가 있는데 그 중 하나에는 다음과 같은 스크린 세션에서 스크립트를 시작하는 많은 명령이 있습니다.
screen -S $SESSION_NAME -p $f -X stuff "$CMD\n"
/usr/bin/time -v를 사용하여 최상위 스크립트를 실행하면 모든 최대 메모리 사용량이 캡처됩니까? 이 스크립트를 cron 작업으로 실행하고 싶지만 시스템의 다른 사용자에게 문제를 일으키기 전에 필요한 메모리 양을 알아야 합니다.
감사해요
답변1
예 혹은 아니오, GNU 시대는 모든 것의 요약/정점을 보여주려고 노력합니다.
다음과 같은 작은 C 프로그램을 사용하여 이를 확인할 수 있습니다 mal.c
.
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
long bytes;
void *buf;
bytes = atol(argv[1]) * 1024;
buf = malloc(bytes);
memset(buf, 0, bytes);
printf("");
return 0;
}
그리고 봐라:
$ gcc mal.c -o mal
$ /usr/bin/time -f "%M" sh -c "./mal 5000"
5452
$ /usr/bin/time -f "%M" sh -c "./mal 10000"
10452
$ /usr/bin/time -f "%M" sh -c "./mal 5000; ./mal 10000"
10452
하지만getrusage(2) 매뉴얼 페이지(Linux)에 명시된 대로 이는 프로세스 트리의 순간 누적 RSS가 아니라 모든 단일 하위 프로세스에 대한 최대 RSS입니다. 모든 프로세스는 동시에 메모리를 사용합니다.
즉, 다음과 같이 병렬 또는 백그라운드 프로세스를 요약하지 않습니다.
$ /usr/bin/time -f "%M" sh -c "./mal 1000000 & ./mal 5000"
5452
time
이는 또한 화면뿐만 아니라 $CMD를 측정하려면 화면 세션 내에서 실행 해야 함을 의미합니다 .
참고로쉘 내장과의 차이점은 시간 바이너리가 파이프나 함수를 직접 요약할 수 없다는 것입니다.
$ time /bin/sleep 1 | /bin/sleep 2
real 2.00
user 0.00
sys 0.00
$ /usr/bin/time -p /bin/sleep 1 | /bin/sleep 2
real 1.00
user 0.00
sys 0.00