Comando di utilizzo della memoria con sintassi simile al comando time


18

Quale comando mostra l'utilizzo della memoria di un programma, sto cercando un comando semplice da usare e che abbia una sintassi simile al timecomando. Sto cercando di trovare l'utilizzo della memoria di un programma di hashing md5 che è scritto in C e impiega 7 secondi per eseguire l'hash "ciao mondo".

Sto usando il sistema operativo Android con busybox installato.

Risposte:


24

Ironia della sorte, timepotrebbe avere una risposta per te, ma questa volta non dovrebbe essere integrato nella shell timema autonomo:

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

Conta MAX RSS però, non VSS, quindi sarebbe utile per te o meno dipende molto dal tuo compito.

UPD. : "Pensare" di Mac OS X è leggermente diverso ma è ancora 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

+1, buono a sapersi. Ma attenzione, questa è una funzionalità specifica di GNU. Android include GNU time(1)?
Warren Young,

Shell incorporato? Né le pagine man bashné quelle zshqui menzionano questo. Lo stai confondendo con times?
Warren Young,

@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - zsh time è una parola riservata - bash time è una parola chiave shell - dash time è / usr / bin / time
poige

@WarrenYoung, e no, Android non lo ha di default, ma dal momento che /usr/bin/timeè costruito pesantemente in cima alle chiamate di sistema wait3o wait4(non ricordo esattamente), può essere facilmente messo in azione anche lì.
poige

A proposito, macOS time mostra il massimo utilizzo della memoria in byte e Linux in kilobyte.
user31389,

2

Puoi usare valgrindper questo:

$ valgrind myprogram arg1 arg2

Il suo output avrà molte cose irrilevanti, ma il suo riepilogo heap fa quello che vuoi:

==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

Non ce l'ho, valgrindma sembra che ci sia una porta per Android, proverò a installarla.
kyle k,

1
@kylek: se stai sviluppando software nativo per CPU su Android, vuoi comunque averlo.
Warren Young,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.