Команда использования памяти с синтаксисом, похожим на команду времени

18

Какая команда показывает использование памяти программой, я ищу команду, которая проста в использовании и имеет синтаксис, аналогичный time команде. Я пытаюсь найти использование памяти программой хеширования md5, которая написана на C и занимает 7 секунд для хэширования "hello world".

Я использую операционную систему Android с установленным busybox.

Кайл К
источник

Ответы:

24

Как ни странно, у вас timeможет быть ответ, но на этот раз он должен быть не встроенным в оболочку, timeа автономным:

$ /usr/bin/time -v uname
Linux
        Command being timed: "uname"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: 2%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.12
        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): 896
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 1
        Minor (reclaiming a frame) page faults: 304
        Voluntary context switches: 3
        Involuntary context switches: 3
        Swaps: 0
        File system inputs: 56
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

Он учитывает MAX RSS, а не VSS, поэтому будет ли он полезным для вас или нет, в значительной степени зависит от вашей задачи.

UPD. : Mac OS X "думать" немного отличается , но все же это time:

/usr/bin/time -l /Applications/Opera.app/Contents/MacOS/Opera
      244.63 real        54.34 user        26.44 sys
 284827648  maximum resident set size
         0  average shared memory size
         0  average unshared data size
         0  average unshared stack size
    711407  page reclaims
      1272  page faults
         0  swaps
       155  block input operations
       251  block output operations
     98542  messages sent
     68330  messages received
        16  signals received
       699  voluntary context switches
    468999  involuntary context switches
poige
источник
+1, приятно это знать. Но будьте осторожны, это особенность GNU. Android включает в себя GNU time(1)?
Уоррен Янг
Встроенная оболочка? Ни здесь, bashни zshстраницы руководства не упоминают об этом. Вы путаете это с times?
Уоррен Янг
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - время zsh является зарезервированным словом - время bash является ключевым словом оболочки - время тире равно / usr / bin / time
poige
@WarrenYoung, и нет, в Android его нет по умолчанию, но, поскольку /usr/bin/timeон в значительной степени построен на системных вызовах wait3или wait4(точно не помню), его также можно легко задействовать.
Пой
Кстати, время macOS показывает максимальное использование памяти в байтах, а Linux - в килобайтах.
user31389
2

Вы можете использовать valgrindдля этого:

$ valgrind myprogram arg1 arg2

В его выводе будет много ненужных вещей, но сводка кучи сделает то, что вы хотите:

==91383== HEAP SUMMARY:
==91383==     in use at exit: 157,643 bytes in 364 blocks
==91383==   total heap usage: 2,999 allocs, 2,635 frees, 306,450 bytes allocated
Уоррен Янг
источник
У меня нет, valgrindно похоже, что есть порт для Android, я постараюсь установить его.
Кайл К
1
@kylek: Если вы занимаетесь разработкой программного обеспечения для ЦП на Android, вы все равно захотите.
Уоррен Янг