프로그램의 RAM 사용량 측정

프로그램의 RAM 사용량 측정

time특정 명령이 소비하는 CPU 시간을 계산하려는 경우 이는 훌륭한 명령입니다.

나는 프로그램과 모든 어린이의 최대 RAM 사용량을 측정할 수 있는 비슷한 것을 찾고 있습니다. 사용된 메모리와 사용되지 않은 할당 메모리를 구별하는 것이 바람직합니다. 어쩌면 중앙값 메모리 사용량(따라서 장기적으로 예상되는 메모리 사용량)을 제공할 수도 있습니다.

그래서 나는하고 싶습니다 :

rammeassure my_program my_args

다음과 유사한 출력을 얻습니다.

Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes

나는 본 적이memusg https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82하지만 제 생각에는 약간 해킹과 비슷하다고 생각합니다.

답변1

time셸에 내장된 구성 요소입니다. 더 많은 정보를 원 time하지만 자세한 정보가 필요 하다면 time자세한 정보 표시( -v) 모드를 사용하여 GNU를 사용해 보세요.

/usr/bin/time -v sleep 5               
    Command being timed: "sleep 5"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:05.00
    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): 2144
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 179
    Voluntary context switches: 2
    Involuntary context switches: 1
    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

패키지 관리자에서 "time" 또는 "gnutime" 패키지를 검색하세요.

답변2

당신은 그것을 사용할 수 있습니다시간프로세스(RSS 및 가상)의 하이 워터마크 메모리 사용량을 측정합니다.

예를 들어:

$ tstime date       
Tue Aug 16 21:35:02 CEST 2011

Exit status: 0

pid: 31169 (date) started: Tue Aug 16 21:35:02 2011
        real   0.017 s, user   0.000 s, sys   0.000s
        rss      888 kb, vm     9764 kb

또한 구문 분석하기 쉬운 출력 모드( -t)를 지원합니다.

답변3

약간 과잉일 수도 있지만 방금 valgrind테스트 massifxterm.

valgrind --trace-children=yes --tool=massif xterm
ms_print massif.out.* | less

메모리 사용량에 대한 멋진 그래프를 얻을 수 있습니다.

    MB
4.230^                     #                    :::::::  :::      @@:     ::: 
     |   @                 #:::@::@@:::::@::::::: :: : ::: :::::::@ ::::::: ::
     |   @               ::#:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::::@@:::::::::: #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
     |   @::: @ :: ::: : : #:: @: @ ::: :@: :: :: :: : ::: ::: : :@ :: : :: ::
   0 +----------------------------------------------------------------------->Mi
     0                                                                   292.4

지나치게 상세한 메모리 사용량 정보. 자세한 내용은Valgrind 매뉴얼.

그러나 프로그램은 약 20배 느리게 실행됩니다. 게다가 저는 . 옵션이 있기 xterm때문에 메모리 사용량도 고려했습니다 !--trace-children=yes

답변4

tstime은 Linux >=3.0의 루트가 아닌 사용자에서는 더 이상 작동하지 않는 것 같습니다. 이 문제를 해결하기 위해 제가 작성한 폴링 유틸리티는 다음과 같습니다.https://github.com/jhclark/memusg/blob/master/memusg

관련 정보