A question asked to me often, “Which processes are using up too much memory?” I generally use top to figure them out manually. But there’s a better way to do it, using Solaris pmap command. I can get a good estimate on the memory usage. Brandon Hutchinson has a shell script that provides a nice output. I modified it a little bit to include a column for process owner.
#!/bin/sh /usr/bin/printf "%-6s %-9s %-13s %s\n" "PID" "Total" "User" "Command" /usr/bin/printf "%-6s %-9s %-13s %s\n" "---" "-----" "----" "-------" for PID in `/usr/bin/ps -ef | /usr/bin/awk '$2 ~ /[0-9]+/ { print $2 }'` do USER=`/usr/bin/ps -o user -p $PID | /usr/bin/tail -1` CMD=`/usr/bin/ps -o comm -p $PID | /usr/bin/tail -1` # Avoid "pmap: cannot examine 0: system process"-type errors # by redirecting STDERR to /dev/null TOTAL=`/usr/bin/pmap $PID 2>/dev/null | /usr/bin/tail -1 | \ /usr/bin/awk '{ print $2 }'` [ -n "$TOTAL" ] && /usr/bin/printf "%-6s %-9s %-13s %s\n" "$PID" "$TOTAL" "$USER" "$CMD" done | /usr/bin/sort -rn -k2
Note, this script needs to run as “root” for pmap to have permission to examine each process.
Output looks something like this:
PID Total User Command --- ----- ---- ------- 694 25240K root /opt/RICHPse/bin/se.sparcv9.5.9 696 5208K root /usr/dt/bin/dtlogin 613 4992K root /opt/CA/BABcmagt/caagentd 326 4512K smmsp /usr/lib/sendmail 260 4440K root /usr/sbin/syslogd 269 2440K root /usr/sbin/cron 196 2360K root /usr/sbin/keyserv 193 2352K root /usr/sbin/rpcbind 103 2336K root /usr/lib/sysevent/syseventd 235 2224K root /usr/lib/nfs/lockd 206 2184K root /usr/lib/netsvc/yp/ypbind