Linux에서 실행되는 응용 프로그램의 최대 메모리를 어떻게 측정합니까?
이 응용 프로그램을 일괄 처리하여 RSS를 사용할 수 없으므로 현재 메모리를보고하므로 RSS를 사용할 수 없습니다. 마지막에 응용 프로그램이보고 된 피크 메모리가 필요합니다.
VmPeak는 할당 된 메모리를보고하고 실제 Ram뿐만 아니라 하드 디스크에서도 계산하기 때문에 해결책이 아닙니다.
Linux에서 실행되는 응용 프로그램의 최대 메모리를 어떻게 측정합니까?
이 응용 프로그램을 일괄 처리하여 RSS를 사용할 수 없으므로 현재 메모리를보고하므로 RSS를 사용할 수 없습니다. 마지막에 응용 프로그램이보고 된 피크 메모리가 필요합니다.
VmPeak는 할당 된 메모리를보고하고 실제 Ram뿐만 아니라 하드 디스크에서도 계산하기 때문에 해결책이 아닙니다.
답변:
프로세스의 최대 메모리 사용량을 추적하는 두 가지 방법이 있습니다.
나는이 도구를 사용하지 않았지만 당신이 찾고있는 것처럼 들립니다. Syrupy 라고 합니다 .
Syrupy는 하나 이상의 실행중인 프로세스의 메모리 및 CPU로드에 대한 스냅 샷을 정기적으로 작성하여 시스템 자원 사용 프로파일을 동적으로 작성하는 Python 스크립트입니다.
$ syrupy.py myprog
PID DATE TIME ELAPSED CPU MEM RSS VSIZE
14634 2008-10-10 20:45:25 00:00 0.0 0.0 2996 6680
14634 2008-10-10 20:45:26 00:01 105 0.2 7804 12592
14634 2008-10-10 20:45:27 00:02 103 0.2 8996 13776
14634 2008-10-10 20:45:28 00:03 103 0.2 10468 15348
14634 2008-10-10 20:45:29 00:04 103 0.3 11412 16396
14634 2008-10-10 20:45:30 00:05 104 0.3 12492 17444
/usr/bin/time -v
아이러니하게도 GNU 시간 명령은 프로세스의 최대 메모리 사용량을 제공 할 수 있습니다. 최대 메모리를 다음과 같이보고합니다 Maximum resident set size (kbytes)
.
$ /usr/bin/time -v ~/projects/prime_numbers/eratosthenes_prime_sieve.pl 10 1000000
...
Command being timed: "/home/saml/projects/prime_numbers/eratosthenes_prime_sieve.pl 10 1000000"
User time (seconds): 1.12
System time (seconds): 0.05
Percent of CPU this job got: 54%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.19
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 79304
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 20014
Voluntary context switches: 83
Involuntary context switches: 274
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
주제가 아주 오래되었지만 cgroups Linux 커널 기능에서 나온 다른 프로젝트를 공유하고 싶습니다.
https://github.com/gsauthof/cgmemtime :
cgmemtime은 프로세스 및 해당 하위 프로세스의 상위 워터 RSS + CACHE 메모리 사용량을 측정합니다.
그렇게하려면 프로세스를 자체 cgroup에 넣습니다.
예를 들어 프로세스 A는 10MiB를 할당하고 20MiB를 할당하는 하위 B를 분기하고 30MiB를 할당하는 하위 C를 분기합니다. 세 개의 프로세스는 모두 시간이 할당되어 할당에 따라 해당 RSS (상주 세트 크기) 메모리 사용이 발생합니다.
이제 문제는 A를 실행 한 결과 실제로 얼마나 많은 메모리가 사용됩니까?
답변 : 60 MiB
cgmemtime은 이러한 질문에 대답하는 도구입니다.
사용 예는 다음과 같습니다.
$ sudo ./cgmemtime --setup -g <myusergroup> --perm 775
$ ./cgmemtime ./testa x 10 20 30
Parent PID is 27189
Allocating 10 MiBs
New Child: 27193
Allocating 20 MiBs
New Child: 27194
Allocating 30 MiBs
Child user: 0.000 s
Child sys : 0.005 s
Child wall: 6.006 s
Child high-water RSS : 11648 KiB
Recursive and acc. high-water RSS+CACHE : 61840 KiB
$ ./cgmemtime python -c 'print range(100000)[48517]'
48517
Child user: 0.014 s
Child sys : 0.014 s
Child wall: 0.029 s
Child high-water RSS : 9948 KiB
Recursive and acc. high-water RSS+CACHE : 5724 KiB
wait4
cgroup ( memory.max_usage_in_bytes
) 과 함께 프로세스 종료를 잡는 데 사용 됩니다 . 자세한 내용은 github의 README에서 확인할 수 있습니다.