시간과 같은 명령이지만 메모리 사용에 대한 명령이 있습니까?


34

과 같은 명령이 time있지만 더 많은 통계를보고합니까? 다음과 같은 것을 할 수 있다면 좋을 것입니다.

$ statistics some_command
time:
    real    0m3.002s
    user    0m0.000s
    sys     0m0.000s
memory:
    min     41K
    peak    2.5M
    mean    1.1M
. . .

더 나아갈 수 있다면 좋을 것입니다. 지금은 디버깅을 위해 의도적으로 top(실제로 glances) 쳐다 보거나 내 코드를 통해 문장을 뿌립니다.

명령을 전달할 수있는 것이 있다면 환상적입니다.

편집하다

perf패키지 linux-toolslinux-tools-commonUbuntu 12.04 에서 해결책을 찾았을 것 입니다.

$ perf stat ./someprocess
Performance counter stats for './someprocess':

      12007.384578 task-clock                #    0.996 CPUs utilized          
             1,092 context-switches          #    0.000 M/sec                  
                16 CPU-migrations            #    0.000 M/sec                  
           295,102 page-faults               #    0.025 M/sec                  
    40,553,682,299 cycles                    #    3.377 GHz                     [83.33%]
    18,400,458,723 stalled-cycles-frontend   #   45.37% frontend cycles idle    [83.35%]
     8,356,832,355 stalled-cycles-backend    #   20.61% backend  cycles idle    [66.64%]
    56,930,684,595 instructions              #    1.40  insns per cycle        
                                             #    0.32  stalled cycles per insn [83.34%]
     9,083,443,825 branches                  #  756.488 M/sec                   [83.35%]
         3,431,737 branch-misses             #    0.04% of all branches         [83.33%]

      12.051963969 seconds time elapsed

( 도움이 된 페이지입니다. )


3
perf결과에 메모리 통계가 없습니다 .
BatchyX

"시간과 같지만 기억력"은 실제로 의미가 없습니다. 정확히 무엇 을 알고 싶습니까? 메모리는 측정이 아닙니다.
Der Hochstapler

1
작성중인 응용 프로그램을 감사하려고합니까? 그렇다면 어떤 언어로되어 있습니까?
dset0x

답변:


28

zsh보다 강력한 내장 time명령을 bash가지고 있으며 zsh버전은 메모리 통계를보고 할 수 있습니다.

zsh일상적인 쉘로 정기적으로 사용하지 않더라도 이러한 종류의 통계를 수집해야 할 때만 실행할 수 있습니다.

TIMEFMT원하는 출력을 나타내 도록 환경 변수를 설정하십시오 . 여기 내 .zshrc파일 에있는 것이 있습니다 (아마도 너무 화려하지만 좋아합니다).

TIMEFMT='%J   %U  user %S system %P cpu %*E total'$'\n'\
'avg shared (code):         %X KB'$'\n'\
'avg unshared (data/stack): %D KB'$'\n'\
'total (sum):               %K KB'$'\n'\
'max memory:                %M MB'$'\n'\
'page faults from disk:     %F'$'\n'\
'other page faults:         %R'

샘플 출력 :

% time ls
[... the output of ls, followed by:]
ls -G   0.00s  user 0.00s system 91% cpu 0.004 total
avg shared (code):         0 KB
avg unshared (data/stack): 0 KB
total (sum):               0 KB
max memory:                668 MB
page faults from disk:     0
other page faults:         337

귀하의 답변이 많이 도움이되었지만 질문이 있습니다. '최대 메모리'는 MB입니까? KB 또는 B라고 생각합니다.
Andres

@Andres가 도와주게되어 기쁩니다. 내 테스트에서 'max memory'는 MB 단위이지만 gist.github.com/mmorearty/fa34c0f29abe454fd14b 를 컴파일 하고 예를 들어 zsh에서 실행 하여 직접 테스트 할 수 있습니다 time malloc-bytes 10000000. 그것은 10 메가 바이트를 malloc 할 것이므로 시도하고 zsh 가보고하는 것을보십시오.
Mike Morearty

zsh 문서 에 따르면 %M최대 메모리는 MB 단위입니다.
gerrard00

%M킬로바이트 단위
Antti Haapala

16

GNU 시간 은 Bash에 내장 된 버전보다 약간 더 많은 정보를보고 할 수 있습니다. command time단순히 time호출 하기 보다는 사용 하고 자세한 내용은 매뉴얼 페이지 또는 정보를 참조하십시오.


2
전화/usr/bin/time -v ./my_command.sh
ostrokach

3

Richard의 답변에 따라 GNU 시간을 사용하고 평균 및 최대 메모리 정보를 제공하는 별칭을 만들 수 있습니다.

alias time="$(which time) -f '\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'"

또는 환경을 조정하십시오.

export TIME='\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'

그러나 이것은 /usr/bin/time기본적으로 호출되지 않는 경우 에만 작동합니다 .

매뉴얼 페이지에서 :

K 프로세스의 평균 총 (데이터 + 스택 + 텍스트) 메모리 사용 (킬로바이트).

M 수명 동안 프로세스의 최대 상주 세트 크기 (킬로바이트).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.