Comando de uso de memória com sintaxe semelhante ao comando time

18

Qual comando mostra o uso de memória de um programa? Estou procurando um comando que seja simples de usar e tenha sintaxe semelhante ao timecomando. Eu estou tentando encontrar o uso da memória de um programa de hash md5 que está escrito em C e leva 7 segundos para o hash "hello world".

Estou usando o sistema operacional Android com o busybox instalado.

kyle k
fonte

Respostas:

24

Ironicamente, timepode ter uma resposta para você, mas desta vez não deve ser embutida no shell, timemas autônoma:

$ /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

No entanto, conta com o MAX RSS, e não o VSS; portanto, seria útil para você ou não, depende muito da sua tarefa.

UPD. : Mac OS X '' think '' é um pouco diferente, mas ainda é 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
fonte
+1, bom saber disso. Mas cuidado, esse é um recurso específico ao GNU. O Android inclui o GNU time(1)?
22713 Warren Young
Shell embutido? Nem as páginas de manual bashnem as zshmencionam isso. Você está confundindo isso times?
22713 Warren Young
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - tempo zsh é uma palavra reservada - tempo de festa é uma palavra-chave shell - tempo de colisão é / usr / bin / hora
poige
@WarrenYoung, e não, o Android não o tem por padrão, mas como /usr/bin/timeé construído com base em chamadas do sistema wait3ou wait4(não me lembro exatamente), ele pode ser facilmente colocado em ação também.
poige
A propósito, o tempo do macOS mostra o uso máximo de memória em bytes e o Linux em kilobytes.
user31389
2

Você pode usar valgrindpara isso:

$ valgrind myprogram arg1 arg2

Sua saída terá muitas coisas irrelevantes, mas seu resumo de heap faz o que você deseja:

==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
Warren Young
fonte
Eu não tenho, valgrindmas parece que existe uma porta para o Android, vou tentar instalá-lo.
precisa
1
@kylek: Se você está desenvolvendo algum software nativo de CPU no Android, você quer tê-lo de qualquer maneira.
Warren Young