Measuring memory per Unix process
For a work-related requirement, I had to figure out how to measure memory consumed by a specific Unix/Linux process. This is more difficult than it may seem.
For one thing, apparently the memory statistics given by Linux are meaningless. This is mainly because the ps command (and the VSZ metric specifically) only lists the size of the address space referenced by a process, not the actual memory size itself. This page suggests the use of smaps, where /proc/$pid/smaps provides the actual amount of memory used by a process.
Because the output of smaps is pretty lengthy, Someone wrote a python script called mem_usage.py to make the output more understandable.
The main issue is that smaps only exists in Linux, and I had a requirement to measure memory usage in OS X too. OS X doesn't even support the /proc concept so I couldn't use smaps.
In the end, I wound up going back to ps and relying on the RSS (resident set size) metric. It's displayed on multiple operating systems and indicates how much RAM is being used for the text and data segments for a specific process in kilobytes.
11:52:44[~/ruby:162]$ ps u
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rpark 2668 0.6 1.4 1652720 44816 s000 S 12:40AM 5:01.71 ./eclipse
rpark 4598 0.0 0.1 2435088 1800 s001 S+ 11:01PM 0:00.09 ssh rpark@1
rpark 2878 0.0 1.2 2769524 36688 s000 S 1:17AM 0:25.44 /System/Lib
rpark 799 0.0 0.0 2435468 792 s001 S Tue12PM 0:00.18 -bash
rpark 535 0.0 0.0 2435468 756 s000 S Tue11AM 0:00.30 -bash
Here are some more discussions on this topic.