22

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.

2 Answers 2

32

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
5
  • +1, good to know this. But beware, this is a GNU-specific feature. Does Android include GNU time(1)? Sep 13, 2013 at 6:07
  • Shell builtin? Neither the bash nor zsh manpages here mention this. Are you confusing it with times? Sep 13, 2013 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, 2013 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, 2013 at 3:53
  • By the way macOS time shows maximum memory usage in bytes and Linux in kilobytes.
    – user31389
    May 21, 2019 at 15:23
4

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
2
  • 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, 2013 at 19:25
  • 1
    @kylek: If you're doing any native CPU software development on Android, you want to have it anyway. Sep 12, 2013 at 19:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .