Perintah penggunaan memori dengan sintaksis mirip dengan perintah waktu

18

Perintah apa yang menunjukkan penggunaan memori dari suatu program, saya mencari perintah yang mudah digunakan dan memiliki sintaksis yang mirip dengan timeperintah. Saya mencoba untuk menemukan penggunaan memori dari program hashing md5 yang ditulis dalam C dan membutuhkan 7 detik untuk hash "hello world".

Saya menggunakan sistem operasi android dengan busybox diinstal.

kyle k
sumber

Jawaban:

24

Ironisnya, timemungkin ada jawaban untuk Anda, tetapi kali ini jawaban itu seharusnya bukan shell-built-in timetetapi yang mandiri:

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

Ini menghitung MAX RSS, bukan VSS, jadi apakah itu akan berguna untuk Anda atau tidak tergantung pada tugas Anda.

UPD. : Mac OS X '"think" sedikit berbeda tapi tetap saja 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
sumber
+1, senang mengetahui hal ini. Namun waspadalah, ini adalah fitur khusus GNU. Apakah Android termasuk GNU time(1)?
Warren Young
Shell builtin? Baik halaman bashmaupun zshmanual tidak menyebutkan ini. Apakah Anda bingung dengan itu times?
Warren Young
@WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done - zsh time adalah kata yang disediakan - bash time adalah kata kunci shell - waktu dasbor adalah / usr / bin / time
poige
@ WarrenYoung, dan tidak, Android tidak memilikinya secara default, tetapi karena /usr/bin/timedibangun di atas panggilan sistem wait3atau wait4(saya tidak ingat persis), dapat dengan mudah diterapkan di sana juga.
poige
By the way, waktu macOS menunjukkan penggunaan memori maksimum dalam byte dan Linux dalam kilobyte.
user31389
2

Anda dapat menggunakan valgrindini:

$ valgrind myprogram arg1 arg2

Outputnya akan memiliki banyak hal yang tidak relevan, tetapi ringkasan tumpukannya melakukan apa yang Anda inginkan:

==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
sumber
Saya tidak punya valgrindtetapi sepertinya ada port untuk android, saya akan mencoba dan menginstalnya.
kyle k
1
@kylek: Jika Anda melakukan pengembangan perangkat lunak CPU asli di Android, Anda tetap ingin memilikinya.
Warren Young