Comando de uso de memoria con sintaxis similar al comando de tiempo

18

Qué comando muestra el uso de memoria de un programa, estoy buscando un comando que sea simple de usar y tenga una sintaxis similar al timecomando. Estoy tratando de encontrar el uso de memoria de un programa de hash md5 que está escrito en C y tarda 7 segundos en el hash "hello world".

Estoy usando el sistema operativo Android con busybox instalado.

kyle k
fuente

Respuestas:

24

Irónicamente, timepodría tener una respuesta para usted, pero esta vez no debería estar incorporada en la consola timesino independiente:

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

Sin embargo, cuenta con MAX RSS, no VSS, por lo que sería útil para usted o no, depende en gran medida de su tarea.

UPD : Mac OS X "piensa" es un poco diferente pero sigue siendo 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
fuente
+1, es bueno saber esto. Pero cuidado, esta es una característica específica de GNU. ¿Android incluye GNU time(1)?
Warren Young
¿Concha incorporada? Ni las páginas de manual bashni zshlas de aquí mencionan esto. ¿Lo estás confundiendo con times?
Warren Young
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - zsh time es una palabra reservada - bash time es una palabra clave de shell - dash time es / usr / bin / time
poige
@WarrenYoung, y no, Android no lo tiene por defecto, pero dado que /usr/bin/timese basa en gran medida en las llamadas del sistema wait3o wait4(no recuerdo exactamente), también se puede poner en acción fácilmente allí.
Poige
Por cierto, el tiempo de macOS muestra el uso máximo de memoria en bytes y Linux en kilobytes.
user31389
2

Puedes usar valgrindpara esto:

$ valgrind myprogram arg1 arg2

Su salida tendrá muchas cosas irrelevantes, pero su resumen de montón hace lo que quieres:

==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
fuente
No tengo valgrindpero parece que hay un puerto para Android, intentaré instalarlo.
kyle k
1
@kylek: Si está haciendo un desarrollo de software de CPU nativo en Android, desea tenerlo de todos modos.
Warren Young