Чи є така команда, як час, але для використання пам'яті?


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), або розпорошуючи заяви через свій код.

Якби я щось міг передати команду, це було б фантастично.

EDIT

Я, можливо, знайшов рішення: 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
У ваших 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

Ваша відповідь допомогла мені ВЕЛИКОГО, але у мене виникає питання: "Макс. Я вважаю, що це КБ або навіть Б.
Андрес

Радий, що це допомогло, @Andres. У моїх тестах "максимальна пам'ять" знаходиться в МБ, але ви можете перевірити її самостійно, зібравши gist.github.com/mmorearty/fa34c0f29abe454fd14b та запустивши її в zsh з напр time malloc-bytes 10000000. Це запустить 10 мегабайт, тому спробуйте його, а потім подивіться, що zsh повідомляє.
Майк Морерті

Згідно з zsh docs %M - це максимальна пам'ять у мегабайтах.
gerrard00

%Mзвіти в кілобайтах
Антті Хаапала

16

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


2
Або зателефонуйте/usr/bin/time -v ./my_command.sh
ostrokach

3

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.