26

Есть ли какая-нибудь команда, как 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

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

3 ответа3

23

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
14

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

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .