#!/bin/ksh
# @(#)$RCSfile: 3rd_toolbox_mem!,v $$Revision: 1.1 $$Date: 2023/03/27 16:02:21 $
#!/bin/ksh
# @(#)$RCSfile: 3rd_toolbox_mem!,v $$Revision: 1.1 $$Date: 2023/03/27 16:02:21 $
#---
# Found at: 
# https://www.toolbox.com/tech/question/aix-61-memory-utilization-is-high-122412/

[[ $1 = -h ]] && cat << USAGE && exit
mem! [-o] - memory usage per user.
-o - old format
ps -e -o user=,vsz=,comm=,pid= + ipcs -mb
USAGE

SumByProcName=Y
[[ $1 = -o ]] && SumByProcName=
lsattr -l sys0 -a realmem -E
print
[[ -n $SumByProcName ]] &&
print "UserName MemoryUsage(K) MemUsagePer(K) ProcessType" ||
print "UserName MemoryUsage(K) MemUsagePer(K) Process:PID"
(ipcs -mb|
awk '$1 == "m" {print $5,int($7/1024)+1,"ShMemorySegment",$3}';
ps -e -o user=,vsz=,comm=,pid=) |
sed 's/^[[:blank:]]*//'| sort -k1,1 -k3,3 |
egrep -v "^[[:blank:]]*$|<defunct>"|
awk -v ByProc=$SumByProcName '
ByProc != "Y" {Pid_=$4};
$1":"$3":"Pid_ == u":"proc":"Pid { s+=$2;next}
s!="" {print u,s,proc,Pid}
{u=$1;s=$2;proc=$3;Pid=Pid_;}
END{print u,s,proc,Pid}' | 
awk 'function pr(u,m,prog,max){printf "%-8.8s %15.15s %15.15s %s\n",u,m,max,prog }
$2 > Max { Max=$2;Prog=$3":"$4;}
{Total+=$2}
u == $1 && $2 > max { max=$2;prog=$3":"$4;}
u == $1 {m+=$2;next}
m != 0 {pr(u,m,prog,max)}
{u=$1;m=$2;max=$2;prog=$3":"$4};
END{pr(u,m,prog,max);pr("total",Total,Pr og,Max)}'| sort +1 -nr | { [[ -n $SumByProcName ]] && sed '1s/\([^[:blank:]]*[[:blank:]]*[[:digit:]]*\).*/\1/ ;s/:[^[:blank:]]*$//' || cat -; } 
svmon -O summary=basic,unit=auto 2>/dev/null 
