Есть ли команда, как время, но для использования памяти?

Есть ли какая-либо команда, как 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-tools а также linux-tools-common на Ubuntu 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

( Страница, которая помогла.)

4 ответа

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

Время GNU может сообщить немного больше информации, чем версия, встроенная в Bash; использование command time а не просто time чтобы вызвать его, и посмотреть страницу руководства или информацию для деталей.

Основываясь на ответе Ричарда, вы можете создать псевдоним для использования времени 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 Максимальный размер резидентного набора процесса в течение его срока службы, в килобайтах.

Вы можете использовать/usr/bin/timeкоторый отличается отtime.

Используйте его с-vи вы можете получить то, что хотите, без какой-либо дополнительной установки.

Пример:

      $ /usr/bin/time -v cat xxx.txt > /dev/null
    Command being timed: "cat xxx.txt"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 100%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.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): 2024
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 121
    Voluntary context switches: 0
    Involuntary context switches: 0
    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
Другие вопросы по тегам