18

What command shows the memory usage of a program, i am looking for a command that is simple to use and has similar syntax to the time command. I am trying to find the memory usage of a md5 hashing program that is written in C and takes 7 seconds to hash "hello world" .

I am using the android operating system with busybox installed.

24

Ironically, time might have an answer for you but this time it should be not shell-built-in time but standalone one instead:

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

It counts MAX RSS though, not VSS, so would it be useful for you or not depends on your very task heavily.

UPD.: Mac OS X' "think" is slightly different but still it's 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, good to know this. But beware, this is a GNU-specific feature. Does Android include GNU time(1)? – Warren Young Sep 13 '13 at 6:07
  • Shell builtin? Neither the bash nor zsh manpages here mention this. Are you confusing it with times? – Warren Young Sep 13 '13 at 6:07
  • @WarrenYoung, for SH in zsh bash dash; do $SH -c 'echo $0; type time'; done — zsh time is a reserved word — bash time is a shell keyword — dash time is /usr/bin/time – poige Sep 14 '13 at 3:28
  • @WarrenYoung, and nope, Android doesn't have it by default, but since /usr/bin/time is built heavily on top of system calls wait3 or wait4 (I don't remember exactly), it can be easily put into action there as well. – poige Sep 14 '13 at 3:53
  • By the way macOS time shows maximum memory usage in bytes and Linux in kilobytes. – user31389 May 21 at 15:23
2

You can use valgrind for this:

$ valgrind myprogram arg1 arg2

Its output will have a lot of irrelevant stuff, but its heap summary does what you want:

==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
  • I do not have valgrind but it looks like there is a port for android, i will try and install it. – kyle k Sep 12 '13 at 19:25
  • 1
    @kylek: If you're doing any native CPU software development on Android, you want to have it anyway. – Warren Young Sep 12 '13 at 19:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.