Befehl zur Speicherauslastung mit ähnlicher Syntax wie der Befehl time

18

Welcher Befehl zeigt die Speichernutzung eines Programms, ich bin auf der Suche nach einem Befehl, der einfach zu bedienen ist und eine ähnliche Syntax wie der timeBefehl hat. Ich versuche, die Speichernutzung eines MD5-Hashing-Programms zu finden, das in C geschrieben ist und 7 Sekunden benötigt, um "Hallo Welt" zu hashen.

Ich verwende das Android-Betriebssystem mit installierter Busybox.

kyle k
quelle

Antworten:

24

Ironischerweise timekönnte es eine Antwort für Sie sein, aber dieses Mal sollte es nicht in eine Shell eingebaut sein, timesondern in eine eigenständige:

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

Es zählt jedoch MAX RSS, nicht VSS. Wäre es für Sie nützlich oder nicht, hängt stark von Ihrer eigentlichen Aufgabe ab.

UPD. : Mac OS X "denkt" ist etwas anders, aber es ist trotzdem 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
quelle
+1, gut zu wissen. Aber Vorsicht, dies ist eine GNU-spezifische Funktion. Enthält Android GNU time(1)?
Warren Young
Shell eingebaut? Weder die Hilfeseiten bashnoch zshhier erwähnen dies. Verwechseln Sie es mit times?
Warren Young
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - zsh time ist ein reserviertes Wort - bash time ist ein Shell-Schlüsselwort - dash time ist / usr / bin / time
poige
@WarrenYoung, und nein, Android hat es nicht standardmäßig, aber da /usr/bin/timees stark auf Systemaufrufen aufbaut wait3oder wait4(ich erinnere mich nicht genau), kann es auch dort leicht in die Tat umgesetzt werden.
Poige
Übrigens zeigt macOS time die maximale Speichernutzung in Bytes und Linux in Kilobytes.
user31389
2

Sie können dafür verwenden valgrind:

$ valgrind myprogram arg1 arg2

Die Ausgabe wird eine Menge irrelevanter Dinge enthalten, aber die Zusammenfassung des Heap-Speichers macht das, was Sie wollen:

==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
quelle
Ich habe keine, valgrindaber es sieht so aus, als gäbe es einen Port für Android. Ich werde versuchen, ihn zu installieren.
Kyle K
1
@kylek: Wenn Sie eine native CPU-Software für Android entwickeln, möchten Sie diese trotzdem haben.
Warren Young