Polecenie użycia pamięci o składni podobnej do polecenia time

18

Jakie polecenie pokazuje użycie pamięci przez program, szukam polecenia, które jest proste w użyciu i ma podobną składnię jak timepolecenie. Próbuję znaleźć użycie pamięci przez program haszujący md5 napisany w C i zajmuje 7 sekund na haszowanie „witaj świecie”.

Używam systemu operacyjnego Android z zainstalowanym busyboksem.

Kyle K.
źródło

Odpowiedzi:

24

Jak na ironię, timemoże mieć dla ciebie odpowiedź, ale tym razem nie powinna ona być wbudowana w powłokę, timeale zamiast tego:

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

Liczy się jednak MAX RSS, a nie VSS, więc czy byłby użyteczny, czy nie, zależy w dużej mierze od twojego zadania.

UPD. : „ Myśl” w systemie Mac OS X jest nieco inny, ale nadal jest 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
źródło
+1, dobrze to wiedzieć. Ale uwaga, jest to funkcja specyficzna dla GNU. Czy Android obejmuje GNU time(1)?
Warren Young,
Wbudowana powłoka? Ani tutaj bashani zshstrony nie wspominają o tym. Czy to mylisz times?
Warren Young,
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - czas zsh jest słowem zastrzeżonym - czas bash jest słowem kluczowym powłoki - czas myślnika to / usr / bin / time
poige
@WarrenYoung i nie, Android nie ma go domyślnie, ale ponieważ /usr/bin/timejest zbudowany na bazie wywołań systemowych wait3lub wait4(nie pamiętam dokładnie), można go łatwo wprowadzić w życie.
poige
Nawiasem mówiąc, czas macOS pokazuje maksymalne wykorzystanie pamięci w bajtach, a Linux w kilobajtach.
user31389,
2

Możesz użyć valgrinddo tego:

$ valgrind myprogram arg1 arg2

Jego dane wyjściowe będą zawierały wiele nieistotnych elementów, ale podsumowanie sterty robi to, co chcesz:

==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
źródło
Nie mam, valgrindale wygląda na to, że jest port dla Androida, spróbuję go zainstalować.
kyle k
1
@kylek: Jeśli tworzysz natywne oprogramowanie dla procesorów na Androida, i tak chcesz je mieć.
Warren Young,